反序列化操作'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>
在浏览了这个主题的互联网后,我似乎无法找到一个体面的答案。如果您有任何建议我会非常感激。
答案 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, 阿米特巴蒂亚