WCF - Win App“读取XML数据时已超出最大字符串内容长度配额(8192)。”

时间:2011-02-05 09:39:21

标签: .net wcf

通过WCF实现Web Service时遇到了一些问题。当我在客户端应用程序中将WCF方法中的值作为字符串(xml)传递时,得到错误

  

格式化程序抛出异常   在尝试反序列化时   消息:有一个错误   试图反序列化参数   http://tempuri.org/:XmlEntity

InnerException消息是

  

'反序列化时出错   System.String类型的对象。该   最大字符串内容长度配额   (8192)在阅读时已超出   XML数据。这个配额可能会增加   通过更改MaxStringContentLength   物业   使用的XmlDictionaryReaderQuotas对象   在创建XML阅读器时。线   249,位置19。'。

我试图在客户端web.configuration文件中更改maxStringContentLength的值,但错误仍然相同。请尽快找出解决方案。

4 个答案:

答案 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中的嵌套级别相关,最好将其保留为默认值。