【发布时间】: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