Ошибка 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-файла, распаковываю на стороне клиента и затем обрабатываю такой большой объем данных.

Другие вопросы по тегам