2009-03-16 23 views
5

Por ahora estoy atascado con IIS6 para ASP.NET-MVC (ya que todavía no puedo actualizar a Server 2008). No parece saber que mis URL RESTful son archivos dinámicos y no los comprime.Opciones de compresión ASP.NET MVC en IIS6

Todos mis archivos .aspx antiguos están comprimidos (como se ve en Fiddler), pero no en el tipo '/products/1001' URLS.

¿Hay alguna manera de hacer que IIS6 comprima mis ActionResults en IIS6 sin usar algo como ActionFilter for compression?

Supongo que IIS7 es lo suficientemente inteligente como para saber que son dinámicos.

¡Puntos de bonificación si me puede decir cómo el IIS6 sabe incluso qué archivos son dinámicos en primer lugar!

Respuesta

5

Como la compresión HTTP para ASP.NET generalmente se ha implementado utilizando HttpModules desde la versión 1.0, y HttpModules todavía pertenecen a la canalización de solicitudes ASP.NET utilizada por el marco MVC, puede usar un HttpModule para inyectar un GZIP o desinflar filtro de respuesta.

Aquí se puede encontrar una muy agradable, de código abierto, listo para ser enviado aplicación: HttpCompress by Ben Lowery (descarga en Google Code)

Sólo hay que añadir una referencia a la DLL, y añadir unas líneas a su web.config. Ya maneja casos y excepciones muy exóticos y raros. Puede agregar exclusiones a su web.config, no basadas en extensiones de archivos (como en IIS6), sino en mime type, que probablemente sea exactamente lo que necesita.

Debo añadir que en realidad estoy ejecutando un sitio web ASP.NET MVC en IIS6 usando esta biblioteca, por lo que puedo confirmar que esto funciona en la práctica.

+0

así que ¿me conviene usar algo como esto y excluir archivos que no quiero, como JPEG, SWF? Otra alternativa es en otra pregunta que hice: http: // stackoverflow.com/questions/649409/can-you-apply-an-actionfilter-in-asp-net-mvc-on-every-action - y use esto para CompressFilter –

+1

Iría con el HttpModule, porque mantiene sus controladores limpios, y se aplicará a todas las solicitudes (excepto para los tipos de mime excluidos como usted mencionó), e. gramo. Archivos CSS, HTML estático, etc., no solo solicitudes manejadas por las acciones de su controlador. – realMarkusSchmidt

0

En un web.config debe registrarse StaticFileHandler y el módulo HTTP

<add verb="GET,HEAD,POST" path="*" type="[Web.Front.Modules].StaticFileHandler"/> 
<add name="HttpCompressionModule" type="[Web.Front.Modules].HttpCompressionModule"/> 

El código fuente se encuentra here

Pero no se olvide de activar la compresión en IIS

+0

El enlace del código fuente está muerto. – Mark

0

Aquí hay una opción que parece funcionar para mí con MVC e IIS 6 usando mapeos comodín y direcciones URL sin extensión:

  1. establece la compresión dinámica y estática de forma global utilizando la herramienta de administración
  2. edite el metabase.xml para que HcScriptFileExtensions esté en blanco en CompressionSchemes. Esto intentará comprimir todo (incluidos jpgs y gifs).
  3. Desactive la compresión dinámica en el nivel de carpeta utilizando la propiedad DoDynamicCompression = "false". Esto supone que todo su contenido estático es un directorio.
  4. Agregue las extensiones de archivos estáticos que desea comprimir (css, js, etc.) en la propiedad HcFileExtensions.

Esto es una solución, pero estoy atrapado con Server 2003 e IIS 6 por el momento.