WCF服务已超出最大阵列长度配额(16384)

时间:2010-06-18 08:17:07

标签: wcf wcf-binding serialization readerquotas

我有一个wsf服务和一个客户端应用程序。在尝试与客户端和服务进行通信时,我收到了以下消息:

格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数http://tempuri.org/:blob时出错.InstallException消息是'反序列化FileBlob类型的对象时出错。读取XML数据时已超出最大数组长度配额(16384)。可以通过更改创建XML读取器时使用的XmlDictionaryReaderQuotas对象的MaxArrayLength属性来增加此配额。第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>

提前感谢您的任何帮助:)

2 个答案:

答案 0 :(得分:43)

实际上,我已经通过在textMessageEncoding部分中添加readerQuotas解决了这个问题。 谢谢你的帮助。

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

答案 1 :(得分: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> 

你提到它“不允许我插入”。您收到了什么错误消息?