在WCF GZip编码器自定义绑定上启用readerQuotas

时间:2010-07-13 04:01:44

标签: .net wcf compression gzip wcf-binding

我已经通过在MSDN上实现了示例GZip encoder来启用了对我的WCF服务的压缩,并且一切都运行良好,但现在需要将我的阅读器配额转移到此绑定,因为我以前有这些定制时我正在使用wsHttpBinding

这是我在wcf服务的Web.config中声明的GZip绑定:

  <customBinding>
    <binding name="BufferedHttpCompressionBinding" closeTimeout="00:00:15"
      openTimeout="00:00:15" receiveTimeout="00:00:15" sendTimeout="00:00:15">
      <gzipMessageEncoding innerMessageEncoding="textMessageEncoding">
      </gzipMessageEncoding>
      <httpTransport maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
        maxBufferSize="2147483647">
        <extendedProtectionPolicy policyEnforcement="Never" />
      </httpTransport>
    </binding>
  </customBinding>

正如您在没有读者配额的情况下所看到的,现在这里是我想添加的读者群:

<readerQuotas
              maxDepth="64"
              maxStringContentLength="1048576"
              maxArrayLength="1048576"
              maxBytesPerRead="1048576"
              maxNameTableCharCount="1048576" />   

我尝试将此节点作为<binding />元素的子节点插入,并且我在<gzipMessageEncoding />元素之间看到了它的在线示例,这两个元素都没有为我返回错误:

System.Configuration.ConfigurationErrorsException: Unrecognized element 'readerQuotas'.

有什么想法?是否可以使用自定义绑定的阅读器配额?我想它必须是,但这可能是一个类更改,或一个简单的方法来让它通过配置?希望一些WCF高手可以提供帮助:)

非常感谢, 格雷厄姆。

2 个答案:

答案 0 :(得分:2)

看一下这个帖子http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/633c5dc8-c134-40c9-9dfc-41a4b1cd3279/

您必须修改GZipMessageEncodingElement和GZipMessageEncodingBindingElement以公开readerQuotas ...

答案 1 :(得分:0)

我能够以编程方式执行此操作:

var gzipBindingElement = new GZipMessageEncodingBindingElement();
myBinding.ReaderQuotas.CopyTo((TextMessageEncodingBindingElement)gzipBindingElement.InnerMessageEncodingBindingElement).ReaderQuotas);