как обойти ограничение размера сообщения по умолчанию в службе данных WCF - PullRequest
3 голосов
/ 07 мая 2011

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 10 мая 2011

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

. Это позволяет использовать опцию "$ format = json" до конца вашегоREST-запросы, например:

http://myservice/Products?$format=json
1 голос
/ 10 мая 2011

Для проблемы # 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 из службы данных на клиенте.

...