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

Bob*_*way 9 .net wcf serialization

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

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

所以我对此进行了调整,发现应该在配置文件的标记内的"readerQuotas"标记上设置MaxStringContentLength属性,如下所示:

     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
Run Code Online (Sandbox Code Playgroud)

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

有趣,令人沮丧的是,当我启动WcfClient.exe来查看我的服务,连接到它并查看配置文件(Client.dll.config)时,我发现这个自动生成的文件已经被大惊小怪了我的所有更改都没有重置为:

  <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                    maxBytesPerRead="4096" maxNameTableCharCount="16384" />
Run Code Online (Sandbox Code Playgroud)

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

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

小智 4

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

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

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