为了让WCF传递大字符串,增加maxStringContentLength的位置在哪里?

时间:2011-02-18 16:19:46

标签: .net wcf serialization

好的,所以我已经设置并测试了一个不错的小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" />

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

任何人都可以帮我解开这个吗?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

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

binding name =“BasicHttpsBinding_IService1”maxReceivedMessageSize =“34000000”maxBufferPoolSize =“34000000”maxBufferSize =“34000000”