我们想在 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 设置为“无”或使用不同的传输。
NetTcpRelayBinding 使用默认的 Microsoft.ServiceBus.TcpRelayTransportBindingElement。
我应该怎么做才能完成这项工作?