如何使用 NetTcpRelay 绑定压缩服务总线上承载的 WCF 流量

本文关键字:WCF 流量 总线 NetTcpRelay 何使用 绑定 压缩 服务 | 更新日期: 2024-10-30 19:19:59

我们希望在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();
        }
    }

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

在此绑定上配置的传输似乎不支持消息编码器上指定的压缩格式 (GZip)。 若要解决此问题,请将二进制消息编码绑定元素上的压缩格式设置为"无"或使用其他传输。

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

我应该怎么做才能完成这项工作?

如何使用 NetTcpRelay 绑定压缩服务总线上承载的 WCF 流量

试试这个:

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

如何在 WCF 4.5 中使 gzip 压缩工作