WCF 服务已超出最大数组长度配额 (16384)

Posted

技术标签:

【中文标题】WCF 服务已超出最大数组长度配额 (16384)【英文标题】:WCF service The maximum array length quota (16384) has been exceeded 【发布时间】:2011-03-05 07:53:15 【问题描述】:

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

"格式化程序在尝试反序列化消息时抛出异常:尝试反序列化参数 http://tempuri.org/:blob 时出错。InnerException 消息是“反序列化 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>

提前感谢您的帮助:)

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这也适用于其他消息编码,如 以及【参考方案2】:

您应该能够在&lt;binding&gt; 元素内添加&lt;readerQuotas&gt; 元素:

<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> 

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

【讨论】:

似乎对于自定义绑定 readerQuotas 必须嵌套在您设置的任何 MessageEncoding (textMessageEncoding, binaryMessageEncoding ...) 中。编码是 的子元素

以上是关于WCF 服务已超出最大数组长度配额 (16384)的主要内容,如果未能解决你的问题,请参考以下文章

WCF MaxReceivedMessageSize:超出最大邮件大小配额

Web Service 或 WCF调用时读取 XML 数据时,超出最大字符串内容长度配额(8192)解决方法

WCF,已超出传入邮件的最大邮件大小配额 (65536)

已超出传入邮件的最大邮件大小配额 (65536)

ASP.NET Web 服务最大数组长度配额

最大数组长度配额