c# - IHttpHandler vs IHttpModule
asp.net iis (5)
15 segundos tiene un pequeño y agradable tutorial con ejemplos prácticos
Mi pregunta es simple (aunque la respuesta probablemente no sea): estoy tratando de decidir cómo implementar un controlador de carga del lado del servidor en C # / ASP.NET.
He usado HttpModules (interfaz IHttpModule) y HttpHandlers (interfaz IHttpHandler) y se me ocurre que podría implementar esto utilizando cualquiera de los mecanismos. También se me ocurre que no entiendo las diferencias entre los dos.
Entonces mi pregunta es esta: ¿en qué casos elegiría usar IHttpHandler en lugar de IHttpModule (y viceversa)?
¿Se ejecuta uno mucho más alto en la tubería? ¿Es mucho más fácil de configurar en ciertas situaciones? ¿No funciona uno bien con seguridad media?
Como se indica here , HttpModules son clases simples que pueden conectarse a la canalización de procesamiento de solicitudes, mientras que HttpHandlers difieren de HttpModules no solo por sus posiciones en la canalización de procesamiento de solicitudes, sino también porque deben asignarse a extensiones de archivo específicas.
Los módulos están diseñados para manejar eventos generados por la aplicación antes y después de que el controlador procese realmente la solicitud. Los manejadores, por otro lado, no tienen la oportunidad de suscribirse a ningún evento de aplicación y, en cambio, simplemente obtienen su método ProcessRequest invocado para el trabajo "principal" de procesar una solicitud específica.
Eche un vistazo a esta documentación de Microsoft (aproximadamente a la mitad de la página en "La solicitud es procesada por la sección HttpApplication Pipeline"):
http://msdn.microsoft.com/en-us/library/bb470252.aspx
Puede ver en el paso 15 donde el manejador tiene la oportunidad de ejecutar. Todos los eventos antes y después de ese paso están disponibles para la interceptación por módulos, pero no por controladores.
Dependiendo de las características específicas que intente lograr, puede usar un controlador o un módulo para implementar un controlador de carga. Incluso podrías terminar usando ambos.
Algo a considerar podría usar un controlador de carga que ya está escrito.
Aquí hay uno de código abierto y gratuito:
http://www.brettle.com/neatupload
Aquí hay uno comercial:
http://krystalware.com/Products/SlickUpload/
Si observa la documentación de NeatUpload, verá que requiere la configuración de un módulo.
Un controlador HTTP ASP.NET es el proceso (con frecuencia denominado "punto final") que se ejecuta en respuesta a una solicitud realizada a una aplicación web ASP.NET. El controlador más común es un controlador de página ASP.NET que procesa archivos .aspx. Cuando los usuarios solicitan un archivo .aspx, la página procesa la solicitud a través del controlador de página. Puede crear sus propios manejadores HTTP que rindan salida personalizada al navegador.
Los usos típicos para los manejadores HTTP personalizados incluyen lo siguiente:
- Feeds RSS Para crear un feed RSS para un sitio web, puede crear un controlador que emita un formato XML con formato RSS. A continuación, puede vincular una extensión de nombre de archivo como .rss al controlador personalizado. Cuando los usuarios envían una solicitud a su sitio que termina en .rss, ASP.NET llama a su controlador para procesar la solicitud.
- Servidor de imágenes Si desea que una aplicación web sirva imágenes en una variedad de tamaños, puede escribir un controlador personalizado para cambiar el tamaño de las imágenes y luego enviarlas al usuario como la respuesta del controlador.
Un módulo HTTP es un conjunto que se llama en cada solicitud que se realiza a su aplicación. Los módulos HTTP se llaman como parte de la canalización de solicitudes de ASP.NET y tienen acceso a los eventos del ciclo de vida a lo largo de la solicitud. Los módulos HTTP le permiten examinar las solicitudes entrantes y salientes y tomar medidas en función de la solicitud.
Los usos típicos para los módulos HTTP incluyen los siguientes:
- Seguridad Como puede examinar las solicitudes entrantes, un módulo HTTP puede realizar una autenticación personalizada u otras comprobaciones de seguridad antes de llamar a la página solicitada, al servicio web XML o al controlador. En Internet Information Services (IIS) 7.0 que se ejecuta en modo integrado, puede extender la autenticación de formularios a todos los tipos de contenido en una aplicación.
- Estadísticas y registro Debido a que se solicitan módulos HTTP en cada solicitud, puede recopilar estadísticas de solicitudes e información de registro en un módulo centralizado, en lugar de en páginas individuales.
- Encabezados o pies de página personalizados Debido a que puede modificar la respuesta de salida, puede insertar contenido como información de encabezado personalizado en cada página o respuesta de servicio web XML.
IHttpModule
le brinda mucho más control, básicamente puede controlar todo el tráfico dirigido a su aplicación web. IHttpHandler
le da menos control (el tráfico se filtra antes de que llegue a su controlador), pero si esto es suficiente para sus necesidades, entonces no veo ninguna razón para usar el IHttpModule
.
De todos modos, probablemente sea mejor tener tu lógica personalizada en una clase separada, y luego simplemente usar esta clase desde IHttpModule
o IHttpHandler
. De esta forma, no tienes que preocuparte por elegir uno u otro. De hecho, podría crear una clase adicional que implemente tanto IHttpHandler
como IHttpModule
y luego decidir qué usar al configurarlo en Web.config
.