• WCF 请求与响应参数大小设置


    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>
  • 相关阅读:
    章节八、2-火狐的插件TryXPath
    章节八、1-如何使用火狐开发者工具来查找元素
    章节七、6-Map集合的区别
    章节七、5-Maps
    章节七、4-Sets
    章节七、3-ArrayList和LinkedList对比
    章节七、2-Linked List
    jQuery中$符号的作用
    jQuery基础的HTML与text区别
    推荐一些github上的免费好书
  • 原文地址:https://www.cnblogs.com/hypo106/p/4157545.html
Copyright © 2020-2023  润新知