web-dev-qa-db-ja.com

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

WCF 4.5は、サードパーティのライブラリや手書きの拡張機能なしでGZIPをサポートしています。 TCPバインディングを介して機能しましたが、HTTPバインディングを介して機能させる方法が見つかりません。私のwcf-サービスはWindowsサービスで自己ホストされています。

アドオン:IISの使用は許可されていません。 WCFの交換に切り替えることはできません。

これはgzipで動作します:

binding="customBinding" bindingConfiguration="tcpCompressionBinding" name="tcp" 

これは私が現在httpに使用しているものです:

binding="basicHttpBinding" bindingConfiguration="httpBinding" name="http"

ドキュメントは本当に私を助けません: http://msdn.Microsoft.com/en-us/library/dd456789.aspx

しかし、これによるとそれはうまくいくはずです:

WCF 4.5以降、WCFバイナリエンコーダーは圧縮のサポートを追加します。圧縮の種類は、CompressionFormatプロパティで構成されます。クライアントとサービスの両方でCompressionFormatプロパティを構成する必要があります。圧縮は、HTTP、HTTPS、およびTCPプロトコルで機能します。クライアントが圧縮の使用を指定しているが、サービスがそれをサポートしていない場合、プロトコルの不一致を示すプロトコル例外がスローされます。詳細については、メッセージエンコーダーの選択

20
NickD

リクエストに従って、コメントを回答としてコピーしました:

「このプロパティはbinaryMessageEncodingBindingElementでのみ公開されるため、この機能を使用するには、次のようなカスタムバインディングを作成する必要があります。

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

圧縮されたメッセージを受信するため、クライアントとサービスの両方のbinaryMessageEncoding要素でcompressionFormatプロパティを構成する必要があります。 「クライアントとサービスの両方が送信することに同意する必要があります

22
jpw