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 を使用します。
この作業を行うにはどうすればよいですか?