2011-02-18 76 views
9

好吧,我已经建立并测试了一个很好的小WCF服务。客户端创建一个字符串并将其传递给服务上的一个方法,然后该服务将其另存为一个文件。用少量的测试数据的完美作品,但是当我有什么应该做的尝试 - 通过一些序列化.NET对象 - 它属于过去,与错误在哪里增加maxStringContentLength为了让WCF传递大字符串?

格式化扔同时 尝试反序列化异常消息: 错误反序列化请求主体 消息操作最大字符串 内容长度配额(8192)在读取XML数据时已被超出。这种配额可能会增加通过更改XmlDictionaryReaderQuotas的MaxStringContentLength属性创建XML阅读器

所以我瞪着这一点,并发现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)时,我被gobsmacked发现这个auto - 生成文件没有包含我的变化,并已重置为:

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

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

任何人都可以帮我解决这个问题吗?

+1

你可以发布绑定的配置,你把`readerQuotas`元素放在哪里? – vlad 2011-02-18 16:36:45

回答

4

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

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

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

0

你还需要增加maxReceiveMessageSize等在这样的结合本身...

绑定名称=“BasicHttpsBinding_IService1” maxReceivedMessageSize =“3400” maxBufferPoolSize =” 34000000“maxBufferSize =”34000000“