Ошибка службы WCF при десериализации объекта

#.net #wcf

#.net #wcf

Вопрос:

У меня есть веб-служба WCF, которая в настоящее время принимает объект JSON из строк, где одна из пар ключ / значение содержит строку в кодировке Base 64 двоичных данных изображения.

Когда веб-служба получает запрос, она выдает следующую ошибку:

Сообщение об исключении: «Произошла ошибка десериализации объекта типа. При чтении XML-данных превышена максимальная квота длины содержимого строки (8192).

Я следовал некоторым решениям, предложенным другими людьми, и мой Web.Config теперь имеет пользовательскую привязку:

  <bindings>
   <webHttpBinding>
     <binding name="LongWebHttpBinding" 
          maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
       <readerQuotas maxDepth="32"
           maxStringContentLength="2147483647"
           maxArrayLength="2147483647"
           maxBytesPerRead="2147483647"
           maxNameTableCharCount="2147483647" />
     </binding>
   </webHttpBinding>
 </bindings>
 

С конечной точкой, настроенной следующим образом:

  <services>
   <service name="GenericService">
     <endpoint address=""
               behaviorConfiguration="jsonBehavior"
               binding="webHttpBinding" bindingConfiguration="LongWebHttpBinding"
               contract="IGenericService" />               
   </service>    
 </services>
 

Согласно всем другим предложениям, настройка bindingConfiguration должна разрешить сообщение об ошибке, которое я получаю.

Есть ли какие-либо дальнейшие шаги, которые я могу предпринять, чтобы попытаться разобраться в этом?

Комментарии:

1. Он все еще не работает после внесения вышеуказанных изменений?

2. Убедитесь, что name атрибут в вашем service элементе содержит имя типа с пространствами имен (или полное имя типа, если на него ссылаются из нелокальной сборки). В противном случае ваша конфигурация не используется.

3. @LadislavMrnka — Я никогда этого не знал (хотя я всегда использую полное пространство имен).

4. @LadislavMrnka Похоже, проблема заключалась в том, что я не использовал полное пространство имен, поэтому, как вы сказали, конфигурация не использовалась.

Ответ №1:

Если у вас все еще возникают проблемы после новых настроек, вы можете настроить maxItemsInObjectGraph атрибут в <dataContractSerializer> разделе определенного вами jsonBehavior.

DataContractSerializer

Однако я полагаю, что если это проблема, исключение сообщит вам об этом — не уверен, поскольку мне никогда не приходилось настраивать что-либо, кроме maxReceivedMessageSize или MaxStringContentLength .

Ответ №2:

Как Ладислав Мрнка, проблема заключалась в том, что я не использовал полное пространство имен службы при вводе его в Web.Config.

Как только я добавил полное пространство имен, оно, похоже, работает правильно.

Спасибо за вашу помощь