HttpHandlers implementación básica

lunes, 1 de febrero de 2010
Flexibilidad, palabra clave al construir aplicaciones web, con httpHandlers podemos llegar un poco mas allá con muy poco esfuerzo.

El concepto detrás de los httpHandlers es brindar un punto en el que se pueda re-definir el procesamiento de una solicitud http, esto se presta para la implementación de muchos y diversos esquemas y patrones para la implementación de aplicaciones web.

Un handler tiene 2 caras, una que mira hacia la aplicación web y que es la que ve en detalle que es lo que hace y como, la otra cara mira hacia Internet Information Services, esta cara se encarga de tomar la solicitud http y llevarla al lugar que le corresponde dentro de la aplicación.

La idea del post es dar a conocer como se puede implementar un handler.

Pasos a seguir:


Creación de la clase que implemente la interfaz iHttpHandler (System.Web)
La clase podemos localizarla en 2 lugares, un (el mas cómodo) una clase dentro del directorio App_Code o en su defecto en un proyecto de assembly que haga referencia a System.Web e implemente la interfaz, para cualquiera de los dos casos la clase debería verse así

public class DemoHttpHandler : IHttpHandler
{

    #region IHttpHandler Members

    bool IHttpHandler.IsReusable
    {
        get { return false; }
    }

    void IHttpHandler.ProcessRequest(HttpContext context)
    {
        //Código para manipular el context
    }

    #endregion
}


Escribir el código necesario para la manipulacion del contexto web
El objeto HttpContext trae consigo a los objetos Response, Request entre otros mas que permiten la manipulación de la solicitud http hacia el sitio web, la manipulación no tiene limites (salvo la imaginacion del desarrollador) por lo que no me explayare mucho en esa parte.

Modificación del archivo web.config para apuntar al handler
Como todas las configuraciones de una aplicación .Net, los handlers tienen su sección propia muy sencilla que se ve de la siguiente forma:

Como se puede apreciar un nodo de http handlers es facil de entender, aquí sus partes
verb = verbos que serán interceptados por el handler, GET,POST,PUT, etc.
path = Extensión o nombre de archivo si es necesario que sera interceptado por el handler ni bien se lo solicite
type = El nombre de la clase (si es que la implementamos dentro del App_Code) , el nombre del assembly al que pertenece
validate = en caso de ser verdadero se verificara que la clase pueda ser cargada en memoria aun si no se ha realizado una solicitud, de ser falso se realizara esa verificación en cuanto se haga una solicitud.



Configuración del mapping en el directorio virtual de IIS para controlar las solicitudes http
Esta configuración se la puede realizar en IIS en sus versiones 5.1 o superior y dependiendo de la versión y el idioma la forma de encontrar donde es que se hace esta configuración, pero en términos generales se encuentra siempre en el mismo lugar (cambian ligeramente los nombres de los tabs y botones), y como dicen que una imagen vale mil palabras les paso las imágenes de la configuración del IIS

En el caso de la última imagen existe un check que verifica si el archivo solicitado existe, si es que se va a crear contenido dinámico en nuestro código este check deberá permanecer sin selección.

Con todo esto ya tenemos listo el handler y funcionando perfectamente, lo demás dependerá del código de implementación dentro del método ProcessRequest de nuestra clase.

0 comments:

Publicar un comentario