【问题标题】:WCF - Win App “The maximum string content length quota (8192) has been exceeded while reading XML data.”WCF - Win App“读取 XML 数据时超出了最大字符串内容长度配额 (8192)。”
【发布时间】:2011-02-05 09:39:20
【问题描述】:

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

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

InnerException 消息是

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

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

【问题讨论】:

  • 你能把你的配置文件的 内容同时发布到客户端和服务器上吗?

标签: .net wcf


【解决方案1】:

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 跟踪,并检查在服务端构造主机和在客户端应用程序构造通道中的活动。

【讨论】:

    【解决方案2】:

    尝试在服务器和客户端都增加这个值:

    <binding 
        name="myBinding"
        maxReceivedMessageSize="2147483647">
            <readerQuotas 
                maxDepth="2147483647"
                maxStringContentLength="2147483647"
                maxArrayLength="2147483647"
                maxBytesPerRead="2147483647"
                maxNameTableCharCount="2147483647" />
    </binding>
    

    【讨论】:

    • 我已经检查了这些设置,但仍然失败。我在运行时检查了上述属性的值,它们是正确的。
    • @Ashish Ranjan,您的端点是否配置为使用此自定义绑定 (myBinding)?
    • 我没有使用任何自定义绑定....我只是修改了basicHttpBinding的属性
    • Ashish,Darin 意味着您应该创建一个 basicHttpBinding 来覆盖并将 maxStringContentLength 的值增加到 2147483647。您能否确认您是否已将端点配置为使用具有 bindingConfiguration 属性的相同 binidng,即,
    【解决方案3】:

    与 WCF 一样,这里是增加 MaxStringContentLength 的编程替代方法。

    BasicHttpBinding binding = new BasicHttpBinding();
    binding.ReaderQuotas.MaxStringContentLength = 2147483647
    
    host.AddServiceEndpoint(contract, binding, address);
    

    【讨论】:

      【解决方案4】:

      应该增加 maxStringContentLength 的大小。但是你不应该盲目地将所有值增加到这个数字。例如,maxDepth 与 XML 中的嵌套级别有关,最好将其保留为默认值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多