0

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 を使用します。

この作業を行うにはどうすればよいですか?

4

1 に答える 1

0

これを試して:

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

WCF 4.5 で gzip 圧縮を機能させる方法

于 2013-12-19T01:19:36.570 に答える