Bueno pues, es un buen momento para dejar en claro cuál son las diferencia/similitudes entre usar uno u otro.
No voy a poner código de ejemplo, hay un montón en internet, la idea de este post es dejar tan claro como sea posible (al estilo conversación) qué es lo que debemos usar cuando se presenta la duda entre usar un módulo HttpHandler o archivo .ashx.
Primero que nada, tenemos que decir que ambos hacen lo mismo: atienden peticiones web http, implementan la interfaz IHttpHandler, cuya finalidad es precisamente esa: atender peticiones web http.
Luego que arriba dije que ambos hacen lo mismo tengo que decir que no es cierto al 100%, pues funcionan distinto, yo diría que la diferencia es el ámbito de tabajo al que pueden acceder.
- Para usar el módulo HttpHandler, hay que decirle al IIS: Oye, por si acaso, este HttpHandler se va a encargar de atender todas las peticiones que tengan que ver con archivos con extensión xyz. luego de eso creas una clase con el código que tenga la lógica que aplicarás cuando soliciten archivos con la extensión xyz… después registras el HttpHandler en el web.config (para que lo sepa el IIS) y listo, a trabajar. Más allá de eso, no mezclas ningún código del httpHandler con las páginas aspx.
- Para usar un archivo ashx, no hay que decirle algo al IIS… simplemente lo llamas y punto, como llamar una páginas aspx… Handler1.ashx?id=5 (por ejemplo). Pones la lógica dentro del archivo ashx… y no necesitas registrar nada en el web.config ni IIS.
Tengo un sitio web donde hemos publicado documentos con extensión pdf desde distintas secciones de mi aplicación web, y dado que son archivos de propiedad de la empresa XYZ, quiero que los documentos que descarguen los usuarios tengan una marca de agua sobre ella. Esta marca de agua la insertaremos en los documentos cada vez que descargan los archivos pdf.
Usando módulos httpHandlers, sería la forma fácil de resolver el asunto. En este caso no alteras la forma en la que los documentos son mostrados, sino que cada vez que quieren descargar… el módulo httpHandler interviene la solicitud y antes de descargar añade su sello de agua.
Por el contrario, para implementar esta solución via archivos ashx, tendríamos que poner en cada link de descarga de documentos pdf algo así: descarga.ashx?document=archivo.pdf.
Pero les pongo un ejemplo perfecto en el que la solución es usar archivos ashx: Digamos que mi aplicación genera un gráfico de barras muy simple… los cuales son mostrados en una página aspx via un tag image así <img src=”mi_handler.ashx?height=300”… de tal modo que la lógica para procesar la imagen reside en el archivo ashx.
Entonces, usa módulos httpHandlers cuando quieras controlar peticiones web http que afecten a toda la aplicación web.
Y use archivos handlers ashx cuando se trate de atender peticiones web http que afecten sólo a determinada página o cuando no te permitan meterle mano al IIS, por ejemplo para mapear una extensión de archivo determinada al motor .NET (como el ejemplo de arriba sobre archivos pdf).
Espero que les sea de utilidad ;)
3 comentarios:
Muy sencilla y por sobretodo muy útil la explicación.
Muchas gacias uno de los mejores materiales en español sobre el tema
Gracias por los comentarios!!
Publicar un comentario