WCFのhttp通信をGZip圧縮する

WCF Web HTTPサービス作って、さくっと使っていくと、すぐにBufferSizeとかMaxRequestLengthとかが引っ掛かってしまう。都度、サイズを大きくしていくけど、ちょっと心配な値に……。
ということで、gzipで圧縮しました。

もう、既に作成しているWCFのサービスを変更していく想定なので、
最初の作成するくだりは割愛。

Web.Configの修正

system.serviceModelの中のbindingsとprotocolMappingを以下のように変更します

<bindings>
      <basicHttpBinding>
        <binding name="UprsHttpBinding" maxReceivedMessageSize="104857600" maxBufferPoolSize="10485760" maxBufferSize="104857600" transferMode="Buffered" />
      </basicHttpBinding>
      <!-- GZipで圧縮して通信するための設定 -->
      <customBinding>
        <binding name="UprsBinaryHttpBinding" >
          <binaryMessageEncoding compressionFormat="GZip" />
          <httpTransport  maxReceivedMessageSize="104857600" maxBufferPoolSize="10485760" maxBufferSize="104857600" transferMode="Buffered" />
        </binding>
      </customBinding>
    </bindings>
    <protocolMapping>
      <!-- 通常のhttpに戻したいときは、まずここを変更する→クライアント側も修正必要-->
      <!--<add binding="basicHttpBinding" scheme="http" bindingConfiguration="UprsHttpBinding" />-->
      <add binding="customBinding" scheme="http" bindingConfiguration="UprsBinaryHttpBinding" />
    </protocolMapping>

クライアント側の修正

サービス参照の更新をすると、app.configも修正されます

これでOKだとおもいます。
データの内容にもよりますが、馬鹿でかいデータがちゃんと圧縮されてました

参考
WCF 4.5新機能