Служба WCF Превышена квота максимальной длины массива (16384)

У меня есть служба WSF и клиентское приложение. При попытке установить связь между клиентом и службой я получил следующее сообщение:

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

У меня есть элемент customBinding, и он не позволяет мне вставить раздел «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>

Заранее благодарю за любую помощь:)


person Dmitry Baranovsky    schedule 18.06.2010    source источник


Ответы (2)


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

<textMessageEncoding messageVersion="Soap11">
          <readerQuotas maxDepth="32" maxStringContentLength="5242880" maxArrayLength="2147483646" maxBytesPerRead="4096" maxNameTableCharCount="5242880"/>
</textMessageEncoding>
person Dmitry Baranovsky    schedule 21.06.2010
comment
это также работает для других кодировок сообщений, таких как ‹binaryMessageEncoding› - person Aaginor; 18.11.2010

Вы должны иметь возможность добавить элемент <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> 

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

person Richard Szalay    schedule 18.06.2010
comment
кажется, что для настраиваемой привязки readerQuotas должен быть вложен в любой установленный вами MessageEncoding (textMessageEncoding, binaryMessageEncoding ...). Кодировки - это детские элементы ‹binding› - person Aaginor; 18.11.2010