通过WCF实现Web Service时遇到了一些问题。当我在客户端应用程序中将WCF方法中的值作为字符串(xml)传递时,得到错误
格式化程序抛出异常 在尝试反序列化时 消息:有一个错误 试图反序列化参数 http://tempuri.org/:XmlEntity
InnerException
消息是
'反序列化时出错 System.String类型的对象。该 最大字符串内容长度配额 (8192)在阅读时已超出 XML数据。这个配额可能会增加 通过更改MaxStringContentLength 物业 使用的XmlDictionaryReaderQuotas对象 在创建XML阅读器时。线 249,位置19。'。
我试图在客户端web.configuration文件中更改maxStringContentLength的值,但错误仍然相同。请尽快找出解决方案。
答案 0 :(得分:12)
Ashish,Darin意味着您应该创建一个basicHttpBinding来覆盖并将maxStringContentLength的值增加到2147483647.您能否确认是否已将端点配置为使用与bindingConfiguration属性相同的binidng。例如,您已经创建了这样的绑定,
<basicHttpBinding>
<binding name="HandleLargeMessage" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
您可以将端点配置为使用上述绑定配置,(请注意bindingConfiguration
属性)
<endpoint
address="....."
binding="basicHttpBinding" bindingConfiguration="HandleLargeMessage"
contract="xxx" />
你能确认你是否已经这样做了吗?很可能在这里似乎并非如此。
如果您已经按照此操作并想确认是否已使用,请在详细级别捕获服务和客户端应用程序的WCF跟踪,并在客户端应用程序的服务和构造通道中检查构造主机中的活动。
答案 1 :(得分:7)
尝试在服务器和客户端上增加此值:
<binding
name="myBinding"
maxReceivedMessageSize="2147483647">
<readerQuotas
maxDepth="2147483647"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="2147483647" />
</binding>
答案 2 :(得分:1)
与WCF一样,以下是增加MaxStringContentLength的程序化替代方法。
BasicHttpBinding binding = new BasicHttpBinding();
binding.ReaderQuotas.MaxStringContentLength = 2147483647
host.AddServiceEndpoint(contract, binding, address);
答案 3 :(得分:-1)
应增加maxStringContentLength的大小。但是你不应该盲目地将所有值增加到这个数字。例如,maxDepth与XML中的嵌套级别相关,最好将其保留为默认值。