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>
【讨论】:
这也适用于其他消息编码,如您应该能够在<binding>
元素内添加<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>
<readerQuotas maxArrayLength="32768" />
<windowsStreamSecurity />
<httpsTransport maxReceivedMessageSize="2147483646"/>
</binding>
</customBinding>
您提到它“不允许我插入”。你得到什么错误信息?
【讨论】:
似乎对于自定义绑定 readerQuotas 必须嵌套在您设置的任何 MessageEncoding (textMessageEncoding, binaryMessageEncoding ...) 中。编码是以上是关于WCF 服务已超出最大数组长度配额 (16384)的主要内容,如果未能解决你的问题,请参考以下文章
WCF MaxReceivedMessageSize:超出最大邮件大小配额