最大字符串内容长度配额(8192)

时间:2011-08-02 18:51:56

标签: wcf readerquotas

  

反序列化操作'CreateTransactionEntity'的回复消息正文时出错。读取XML数据时已超出最大字符串内容长度配额(8192)。通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象的MaxStringContentLength属性,可以增加此配额。

嘿,即使我的web.config文件中有一个比生命更长的readerQuota节点,我仍然会收到此错误...

<system.serviceModel>
<bindings>
  <netTcpBinding>
    <binding name="BindingTcp"  maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00">
      <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
                  maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
    </binding>
  </netTcpBinding>

在浏览了这个主题的互联网后,我似乎无法找到一个体面的答案。如果您有任何建议我会非常感激。

2 个答案:

答案 0 :(得分:15)

为了确保选择为绑定指定的值,必须将<binding>元素的绑定名称分配给<endpoint>元素的bindingConfiguration属性。如果不这样做,WCF将使用指定绑定的默认值。

<system.serviceModel>
  <bindings>
    <netTcpBinding>
      <binding name="BindingTcp"  maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
      </binding>
    </netTcpBinding>

在上面的示例中,您已在<binding>元素中指定了“BindingTCP”作为名称。所以在你的端点做这个:

<endpoint address="net.tcp://some.website.url/yourserivce" binding="netTcpBinding" bindingConfiguration="BindingTCP" contract="IYourContract" />

根据错误的位置(在客户端或服务器上)将确定需要修改哪个配置文件。如果两端都发生错误,请修改两个配置文件。

答案 1 :(得分:1)

您应该检查客户端应用程序以了解它是否使用默认绑定配置。更快捷的方法是以详细级别捕获WCF跟踪并检查Construct ChannelFactory活动的事件。

HTH, 阿米特巴蒂亚