2010-06-18 3 views
27

У меня есть служба wsf и клиентское приложение. При попытке общения клиента и служб я получил следующее сообщение:Служба WCF Максимальная длина длины массива (16384) превышена

"Форматировщика бросил исключение при попытке десериализации сообщений:. Там была ошибка при попытке десериализации параметра http://tempuri.org/:blob Сообщения InnerException было «Ошибка десериализации объекта типа FileBlob. Максимальная длина длины массива (16384) была превышена при чтении данных XML. Эта квота может быть увеличена путем изменения свойства MaxArrayLength объекта XmlDictionaryReaderQuotas, используемого при создании XML-ридера. 1, позиция 25931. 'Для получения более подробной информации см. InnerException. "

У меня есть настраиваемый элемент привязки, и это не позволяет мне для вставки раздела «readerQuotas». В обоих клиентов и обслуживания конфиги У меня есть следующий обязательный элемент:

<customBinding> 
    <binding name="LicenseServiceBinding" 
       closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"> 
     <security authenticationMode="UserNameOverTransport"> 
      <localClientSettings maxClockSkew="00:07:00" /> 
      <localServiceSettings maxClockSkew="00:07:00" /> 
     </security> 
     <windowsStreamSecurity /> 
     <httpsTransport maxReceivedMessageSize="2147483646"/>   
    </binding> 
</customBinding> 

Спасибо заранее за любую помощь :)

ответ

18

Вы должны быть в состоянии добавить <readerQuotas> элемент внутри <binding> элемента:

<customBinding> 
    <binding name="LicenseServiceBinding" 
       closeTimeout="00:01:00" openTimeout="00:01:00" 
       receiveTimeout="00:10:00" sendTimeout="00:01:00"> 
     <security authenticationMode="UserNameOverTransport"> 
      <localClientSettings maxClockSkew="00:07:00" /> 
      <localServiceSettings maxClockSkew="00:07:00" /> 
     </security> 
     <readerQuotas maxArrayLength="32768" /> 
     <windowsStreamSecurity /> 
     <httpsTransport maxReceivedMessageSize="2147483646"/>   
    </binding> 
</customBinding> 

Вы упомянули, что он «не позволяет мне вставлять». Какое сообщение об ошибке вы получаете?

+6

, кажется, что для пользовательского связывания readerQuotas должен быть вложено в любом MessageEncoding (textMessageEncoding, binaryMessageEncoding ...) вы установили. Кодировки представляют собой дочерние элементы из Aaginor

+3

Помещение непосредственно в '' '' работает для меня. – AndiDog

+0

да, это работает для меня. Я должен добавить файл конфигурации клиента wcf – Mahesh

42

На самом деле, я решил проблему, добавив readerQuotas в раздел textMessageEncoding. Спасибо за помощь.

<textMessageEncoding messageVersion="Soap11"> 
      <readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880"/> 
</textMessageEncoding> 
+7

, это также работает для других кодировок сообщений, таких как Aaginor