Как обойти ограничение размера сообщения по умолчанию в службе данных WCF

Я столкнулся с проблемой с моей службой данных WCF. Одна из таблиц содержит слишком много данных для возврата (около 80 полей), так что предел размера будет превышен только одной записью (более 60 тыс. По оценке, я не могу сказать точно, потому что сообщение не может быть просмотрено в результате прерывание вывода сообщений).

До сих пор я обнаружил, что это можно обойти двумя способами.

  • Повысить лимит размера сообщения.
  • Изменить формат передачи данных на Json.

Для обоих решений есть некоторые проблемы, которые необходимо преодолеть.

  • В Интернете есть много статей, объясняющих, как настроить службу WCF для изменения размера буфера или квоты чтения. Но я не знаю, как работает служба данных WCF, потому что в официальных документах не указано, как настроить службу данных WCF декларативно. Служба данных WCF поддерживает те же метафоры конфигурации? И как этого добиться?

  • Клиентская библиотека службы данных WCF, похоже, не поддерживает формат json из коробки. Я должен реализовать те же функции самостоятельно. Мой вопрос здесь заключается в том, существует ли какой-либо парсер json odata, существующий в C#?

2 ответа

Для решения проблемы № 1 ознакомьтесь с темой " Поставщик потоковой передачи (службы данных WCF)", в которую входит эта конфигурация WCF, позволяющая включать большие сообщения в службу OData и из нее с помощью служб данных WCF:

 <system.serviceModel>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
 <services>
     <!-- The name of the service -->
     <service name="PhotoService.PhotoData">
         <!--you can leave the address blank or specify your end point URI-->
         <endpoint binding="webHttpBinding" 
           bindingConfiguration="higherMessageSize" 
           contract="System.Data.Services.IRequestHandler"></endpoint>
     </service>
 </services>
 <bindings>
     <webHttpBinding>
         <!-- configure the maxReceivedMessageSize value to suit the max size of 
                  the request (in bytes) you want the service to receive-->
         <binding name="higherMessageSize" transferMode="Streamed"  
          maxReceivedMessageSize="2147483647"/>
     </webHttpBinding>
 </bindings>

Для проблемы № 2 клиент служб данных WCF не поддерживает JSON, только Atom XML. Вы пробовали пост Использование System.Json для не-Silverlight проектов? которая, кажется, имеет некоторую полезную информацию о других альтернативах синтаксического анализа JSON из службы данных на клиенте.

Чтобы использовать JSON с WCF Data Services, вам нужен набор инструментов WCF Data Services, который можно бесплатно загрузить по адресу http://wcfdstoolkit.codeplex.com/.

Это дает возможность добавить "$format=json" в конец ваших запросов REST, как в:

http://myservice/Products?$format=json
Другие вопросы по тегам