Ошибка Silverlight при загрузке множества строк из базы данных SQL
У меня есть приложение Silverlight, созданное с помощью Entity Framework 4, куча модулей Silverlight и веб-проект, содержащий мои DomainService, Model и Web.Config.
Я извлекаю данные из локального SQL Server, который работает нормально. Один из моих модулей SL извлекает данные из определенной таблицы, когда в этой таблице более 4000 строк, приложение завершает работу и выдает следующее сообщение об ошибке. Когда у него около 1000 икринок, он работает просто отлично. Итак, я думаю, что, возможно, DomainService не может обработать все строки, или, возможно, мои настройки привязки в webconfig неверны. Что я могу сделать?
Сообщение об ошибке:
{System.ServiceModel.DomainServices.Client.DomainOperationException: операция загрузки не выполнена для запроса "LoadSiteCageData". Удаленный сервер возвратил ошибку: NotFound. ---> System.ServiceModel.CommunicationException: удаленный сервер возвратил ошибку: NotFound. ---> System.Net.WebException: удаленный сервер возвратил ошибку: NotFound. ---> System.Net.WebException: удаленный сервер возвратил ошибку: NotFound. в System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) в System.Net.Browser.BrowserHttpWebRequest. <> c_ DisplayClass5.b _4 (объект sendState) в System.Net.Browser.AsyncHelb <>. (Объект sendState) --- Конец внутренней трассировки стека исключений --- в System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Состояние объекта) в System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse (результат IAsyncResult) --- Конец трассировки стека внутренней исключительной ситуации --- в System.ServiceModel.DomainServices.Client.WodeResserIservice.Client. DomainServices.Client.DomainClient.EndQuery (IAsyncResult asyncResult) в System.ServiceModel.DomainServices.Client.DomainContext.CompleteLoad (IAsyncResult asyncResult) --- Конец трассировки стека внутренних исключений --- в System.Ser ViceModel.DomainServices.Client.OperationBase.Complete(Исключительная ошибка) в System.ServiceModel.DomainServices.Client.LoadOperation.Complete(Исключительная ошибка) в System.ServiceModel.DomainServices.Client.DomainContext.DomainServices.Client.DomainContext.<> C_ DisplayClass1b.b _17 (Объект)
Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="system.serviceModel">
<section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" allowDefinition="MachineToApplication" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings />
<system.web>
<httpModules>
<add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID">
</pages>
<authentication mode="Windows" />
</system.web>
<system.codedom></system.codedom>
<system.webServer>
<modules>
<add name="DomainServiceModule" type="System.ServiceModel.DomainServices.Hosting.DomainServiceHttpModule, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<bindings>
<customBinding>
<binding name="MyService.Web.Service1.customBinding0">
<binaryMessageEncoding />
<httpTransport />
</binding>
</customBinding>
</bindings>
<services>
<service name="MyService.Web.Service1">
<endpoint address="" binding="customBinding" bindingConfiguration="MyService.Web.Service1.customBinding0" contract="MyService.Web.Service1" />
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
1 ответ
Я полагаю, что это связано с ограничением размера данных, которые могут передаваться по проводам, если речь идет о привязке basichttp. Это 64к.
Есть 2 варианта, чтобы обойти это.
- Потяните данные страницу за страницей
- Загрузите данные в виде файла, разделенного запятыми, проанализируйте и отобразите
Обычно я загружаю данные в виде zip-файла, распаковываю на стороне клиента и затем обрабатываю такой большой объем данных.