如何使用NetTcpRelay绑定压缩ServiceBus上托管的WCF流量

时间:2013-12-19 00:41:03

标签: c# wcf wcf-binding servicebus nettcprelaybinding

我们希望在WCF 4.5服务上使用GZip压缩。 我们在ServiceBus上托管服务,并使用NetTcpRelayBinding。

WCF 4.5应该支持GZip压缩OOB。 我扩展了标准的NetTcpRelayBinding并打开了GZip压缩

    public class CompressedNetTcpRelayBinding : NetTcpRelayBinding 
    {
        public override BindingElementCollection CreateBindingElements()
        {
            var elements = base.CreateBindingElements();
            var encodingBinding = elements.Single(e => e is BinaryMessageEncodingBindingElement);
            ((BinaryMessageEncodingBindingElement)encodingBinding).CompressionFormat = CompressionFormat.GZip;

            var bindingElementCollection = new BindingElementCollection();
            foreach (var bindingElement in elements)
            {
                bindingElementCollection.Add(bindingElement);
            }

            return bindingElementCollection.Clone();
        }
    }

但是,当我尝试托管服务时,我得到以下异常:

此绑定上配置的传输似乎不支持消息编码器上指定的CompressionFormat(GZip)。要解决此问题,请将BinaryMessageEncodingBindingElement上的CompressionFormat设置为“None”或使用其他传输。

NetTcpRelayBinding使用默认的Microsoft.ServiceBus.TcpRelayTransportBindingElement。

为了使这项工作,我该怎么做?

1 个答案:

答案 0 :(得分:0)

试试这个:

<customBinding>
  <binding name="BinaryCompressionBinding"> 
    <binaryMessageEncoding compressionFormat="GZip"/> 
    <httpTransport /> 
  </binding>
</customBinding>

How to get gzip compression working in WCF 4.5