IIS部署了一个WCF webservice站点
服务器: winserver2008 .net4.0 开发的WCF
客户端: .net4.0开发的Client, 引用webservice
相关属性官方解释http://msdn.microsoft.com/zh-cn/library/system.servicemodel.basichttpbinding(v=vs.110).aspx
maxBufferPoolSize:获取或设置为从通道接收消息的消息缓冲区管理器分配并供其使用的最大内存量(以字节为单位)
maxReceivedMessageSize:获取或设置配置了此绑定配置的通道上可以接收的消息的最大大小(以字节为单位)。
maxBufferSize:获取或设置缓冲区的最大大小(以字节为单位),该缓冲区用于接收来自通道的消息。
readerQuotas:获取或设置可由配置了此绑定的终结点处理的 SOAP 消息的该复杂性约束。
readerQuotas相关属性官方解释http://msdn.microsoft.com/zh-cn/library/system.xml.xmldictionaryreaderquotas(v=vs.110).aspx
max:获取此类的一个实例,其所有属性都设置为最大值。
maxArrayLength:获取并设置允许的最大数组长度。
maxBytesPerRead:获取并设置允许每次读取返回的最大字节数。
maxDepth:获取并设置最大嵌套节点深度。
maxNameTableCharCount:获取并设置表名称中允许的最大字符数。
maxStringContentLength:获取并设置读取器返回的最大字符串长度。
modifiedQuotas:为XmlDictionaryReaderQuotas获取更改后的配额。
备注:
在序列化和反序列化 SOAP 消息时,WCF 使用XmlDictionary 实例。 XmlDictionary 包含字符串/值对用于减少 SOAP 消息的大小。 在序列化消息时该值在该字符串位置编写。 当反序列化消息时该值读取,但该字符串写入消息对象编写。XmlDictionaryReaderQuotas 是包含 XmlDictionaryReader 选件类使用的配额选件类。 字典读取器最重要的安全功能是配额。 必须为字典读取器工厂方法指定配额实例。 默认构造函数创建“安全”默认值(与编码默认值相同),并且类具有静态 Max 属性,用于创建不带配额的读取器。
1. 客户端win7:
接口请求时,报错请求大小超出限制。
此问题需要修改服务端和客户端的配置文件。
服务端/客户端:<system.serviceModel>...</system.serviceModel>节点里添加如下配置
<bindings> <basicHttpBinding> <binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"> </binding> </basicHttpBinding> </bindings>
客户端可能已经存在这些节点,不要改变原有信息,只要将红色部分添加或修改就好。经测试解决了上述问题。
2.客户端winxp:
将客户端程序放在XP上运行时,又出现了另一个报错:
[Error in deserializing body of reply message for operation '****'. The maximum string content length quota(8192) has been exceeded while reading XML data. This quota may be increated by changing the MaxStringContentLength property on the XmlDictionaryReaderQuotas object used wher creating the XML reader. Line 3, position 12121.]
在反序列化答复消息时出错误。最大字符串的内容长度配额( 8192 )已超出而读取XML数据。该配额可能通过更改XmlDictionaryReaderQuotas的MaxStringContentLength属性对象
此问题需要在<binding ..........></binding>节点中再添加另一个节点配置,如下:
<bindings> <basicHttpBinding> <binding maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647"> <readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxNameTableCharCount="2147483647" /> </binding> </basicHttpBinding> </bindings>