2009-09-09 21 views
7

Tengo un servicio REST que devuelve una gran cantidad de XML, aproximadamente 150k vale.WCF REST Compresión

p. Ej. http://xmlservice.com/services/RestService.svc/GetLargeXML

Por lo tanto, quiero comprimir la respuesta del servidor, ya que GZIP debería reducir esto a algo mucho más pequeño. Después de buscar en todas partes donde no puedo encontrar un ejemplo de cómo realizar la compresión para los servicios WCF REST. ¡¡Ayuda!!

NOTA: Mi servicio está alojado por un tercero y NO PUEDO hacerlo a través de IIS ya que no es compatible con ellos.

Respuesta

-1

Aquí hay un enlace que podría ser adecuado:

WS-Compression for WCF

Como mínimo, se debe poner en el camino correcto.

+2

Gracias, pero lamentablemente se trata de una solución WS (SOAP) y no REST (webHttp). – PhilJ

-2

La manera más fácil sería utilizar el filtro de compresión PLJ en frente de su servlet.

PJL Compression Filter

Este busca el Accept-Encoding cabecera HTTP para determinar si el cliente puede aceptar una respuesta comprimida. Básicamente, simplemente envuelve el ServletOutputStream en un GZipOutputStream o DeflateerOutputStream, bastante simple y útil.

+0

Este es un servicio WCF que se ejecuta en IIS, por lo que un filtro de servlet J2EE obviamente no es una opción. – PhilJ

+0

Malo, no tenía ni idea de qué era WCF, supongo que era otro framework de Java. – Gandalf

6

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.

+1

Lo mismo se puede hacer usando web.config, que es más conveniente: http://codeasp.net/blogs/raghav_khunger/microsoft-net/1973/asp-net-enable-gzip-compression-via-web-config –

Cuestiones relacionadas