【问题标题】:Where does one increase maxStringContentLength in order to get WCF to pass large strings?为了让 WCF 传递大字符串,在哪里增加 maxStringContentLength?
【发布时间】:2011-06-29 22:46:34
【问题描述】:

好的,我已经设置并测试了一个不错的小型 WCF 服务。客户端创建一个字符串并将其传递给服务的方法,然后服务将其保存为文件。与少量测试数据完美配合,但是当我尝试它应该做的事情时 - 传递一些序列化的 .net 对象 - 它会失败,并出现错误

格式化程序抛出异常,而 试图反序列化消息: 反序列化请求正文时出错 操作最大字符串的消息 读取 XML 数据时已超出内容长度配额 (8192)。可以通过更改创建 XML 阅读器时使用的 XmlDictionaryReaderQuotas 对象的 MaxStringContentLength 属性来增加此配额

所以我看了一下,发现 MaxStringContentLength 属性应该设置在配置文件标签内的“readerQuotas”标签上,如下所示:

     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

所以我改变它。我在客户端的 App.config 文件上更改它。我在我的服务器的 App.config 文件和 Web.config 文件上更改它。我在我的单元测试项目的 App.config 文件中更改它。而且这些都不起作用 - 我一直收到同样的错误。

有趣但令人沮丧的是,当我启动 WcfClient.exe 来查看我的服务、连接到它并查看配置文件 (Client.dll.config) 时,我惊讶地发现这个自动生成的文件不包含我的任何更改并已重置为:

  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />

我不知道它是从哪里获得这些值的——在我的整个解决方案中都没有设置这些值。所以它必须使用默认值,但是当我在服务器和客户端都提供自定义配置文件时,我不明白为什么它使用默认值。

谁能帮我解开这个问题?

【问题讨论】:

  • 你能把绑定的配置贴到你放readerQuotas元素的地方吗?

标签: .net wcf serialization


【解决方案1】:

1) 您的端点是否可能没有正确引用自定义绑定?你能发布你的绑定和端点部分吗?

2) WcfTestClient 不使用您的服务或客户端配置来设置自己的配置。在执行服务之前,您需要使用 SvcConfigEditor 手动编辑 Client.dll.config 以设置 WcfTestClient 客户端绑定数据。

如果您查看“工具”->“选项”菜单,您可以保留 WcfTestClient 配置更改。有关 WcfTestClient 的更多信息,请查看:http://msdn.microsoft.com/en-us/library/bb552364.aspx

【讨论】:

    【解决方案2】:

    您还需要像这样增加绑定本身的 maxReceiveMessageSize 等...

    绑定名称="BasicHttpsBinding_IService1" maxReceivedMessageSize="34000000" maxBufferPoolSize="34000000" maxBufferSize="34000000"

    【讨论】:

      猜你喜欢
      • 2011-10-24
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2011-02-08
      • 2013-07-08
      • 1970-01-01
      • 2018-05-26
      • 2013-11-09
      相关资源
      最近更新 更多