En realidad, es bastante fácil de hacer esto, al menos con .NET 4.0 (No he probado con 3.5). Lo que hago es dejar que IIS 7 se encargue de eso. No es necesario crear un filtro de compresión personalizado.
Primero, asegúrese de haber instalado la función Compresión dinámica para IIS 7. A continuación, seleccione el servidor en el Administrador IIS y utilice el módulo de compresión para activar la Compresión dinámica. Alternativamente, puede hacerlo desde la línea de comando:
C:\windows\system32\inetsrv\appcmd set config -section:urlCompression /doDynamicCompression:true
A continuación, edite el siguiente archivo. Puede que tenga que hacer una copia en lugar de editar la configuración directamente (Notepad ++ se queja por mí), y luego sobrescribir el original cuando esté listo.
C:\Windows\System32\Inetsrv\Config\applicationHost.config
Allí se encuentra un <dynamicTypes> sección bajo < compresión http >. En <dynamicTypes>, deberá agregar todos los tipos de mime que desee comprimir cuando el cliente envíe un encabezado Aceptar-Codificación: gzip. Por ejemplo:
<dynamicTypes>
<add mimeType="text/*" enabled="true" />
<add mimeType="application/xml" enabled="true" />
<add mimeType="application/json" enabled="true" />
<add mimeType="message/*" enabled="true" />
<add mimeType="application/x-javascript" enabled="true" />
<add mimeType="*/*" enabled="false" />
</dynamicTypes>
Una vez que haya hecho todo eso, recicle su grupo de aplicaciones y estará listo. Si eso no funciona, intente reiniciar su servidor y asegúrese de que la compresión dinámica esté activada en el nivel de la aplicación, así como en el nivel del servidor.
Nota: Según algunas publicaciones que he leído, solía haber un error en el que tenía que especificar la codificación de caracteres (por ejemplo, "application/json; charset = utf-8"). Sin embargo, no tuve ningún problema.
Gracias, pero lamentablemente se trata de una solución WS (SOAP) y no REST (webHttp). – PhilJ