Как обойти ограничение размера сообщения по умолчанию в службе данных 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