Mi pregunta es simple (aunque la respuesta probablemente no lo sea): estoy tratando de decidir cómo implementar un controlador de carga del lado del servidor en C # / ASP.NET.
He usado tanto HttpModules (interfaz IHttpModule) como HttpHandlers (interfaz IHttpHandler) y se me ocurre que podría implementar esto usando cualquier mecanismo. También se me ocurre que no entiendo las diferencias entre los dos.
Entonces, mi pregunta es la siguiente: ¿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 determinadas situaciones? ¿No funciona bien con seguridad media?
c#
asp.net
iis
httphandler
httpmodule
Dan Esparza
fuente
fuente
Respuestas:
Un controlador HTTP de 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 controladores HTTP que generen resultados personalizados en el navegador.
Los usos típicos de los controladores HTTP personalizados incluyen los siguientes:
Un módulo HTTP es un ensamblado 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 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 de los módulos HTTP incluyen los siguientes:
De: http://msdn.microsoft.com/en-us/library/bb398986.aspx
fuente
Como se indica aquí , HttpModules son clases simples que pueden conectarse a sí mismas en 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.
fuente
IHttpModule
le da 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 elIHttpModule
.De todos modos, probablemente sea mejor tener su lógica personalizada en una clase separada y luego usar esta clase de
IHttpModule
oIHttpHandler
. De esta manera, realmente no tiene que preocuparse por elegir uno u otro. De hecho, se podría crear una clase extra que implementa ambosIHttpHandler
yIHttpModule
y luego decidir qué usar estableciéndola enWeb.config
.fuente
Los módulos están pensados para manejar eventos generados por la aplicación antes y después de que el controlador realmente procese la solicitud. Los controladores, por otro lado, no tienen la oportunidad de suscribirse a ningún evento de la aplicación y, en su lugar, 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 sección "La solicitud es procesada por la canalización de HttpApplication"):
http://msdn.microsoft.com/en-us/library/bb470252.aspx
Puede ver en el paso 15 dónde el controlador tiene la oportunidad de ejecutar. Todos los eventos antes y después de ese paso están disponibles para ser interceptados 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ía terminar usando ambos.
Algo a considerar podría ser usar un controlador de carga que ya está escrito.
Aquí hay uno gratuito y de código abierto:
http://www.brettle.com/neatupload
Aquí hay uno comercial:
http://krystalware.com/Products/SlickUpload/
Si observa la documentación de NeatUpload, verá que requiere que configure un módulo.
fuente
15 segundos tiene un pequeño tutorial que da un ejemplo práctico
fuente