Esta documentación está archivada y no tiene mantenimiento.

Introducción a los controladores HTTP

Visual Studio 2005

Un controlador HTTP de ASP.NET es el proceso (con frecuencia llamado el "extremo") que se ejecuta como respuesta a una solicitud realizada a una aplicación Web ASP.NET. El controlador más común es el de la 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 la página.

El controlador de páginas de ASP.NET sólo es un tipo de controlador. ASP.NET viene con otros controladores integrados como el controlador del servicio Web para archivos .asmx.

Puede crear controladores HTTP personalizados cuando desee un control especial que puede identificar utilizando extensiones de nombre de archivo en su aplicación. Por ejemplo, los siguientes escenarios constituyen un buen uso de los controladores HTTP personalizados:

  • Suministros RSS   Para crear un suministro RSS para un sitio determinado, puede crear un controlador que emita XML con formato RSS. Puede enlazar a continuación la extensión .rss (por ejemplo) de su aplicación al controlador personalizado. Cuando los usuarios envían una solicitud al sitio que finaliza en .rss, ASP.NET llama al controlador para procesarla.

  • Servidor de imágenes   Si desea que su aplicación Web sirva imágenes en diferentes tamaños, puede escribir un controlador personalizado para cambiar el tamaño de las imágenes y después devolverlas al usuario como respuesta del controlador.

Los controladores HTTP tienen acceso al contexto de la aplicación, por ejemplo, a la identidad (si se conoce) del usuario que realiza la solicitud, al estado de la aplicación y a la información de la sesión. Cuando se necesita un controlador HTTP, ASP.NET llama al método ProcessRequest en el controlador adecuado. El método ProcessRequest del controlador crea una respuesta, que se devuelve al explorador que realizó la solicitud. Como con cualquier solicitud de página, la respuesta pasa por cualquier módulo HTTP que se ha suscrito a eventos que aparecen después de que el controlador se haya ejecutado. Para obtener más información sobre el procesamiento de solicitudes de servidor Web, vea Información general sobre el ciclo de vida de una aplicación ASP.NET.

Un controlador HTTP puede ser sincrónico o asincrónico. Un controlador sincrónico no vuelve hasta que termina de procesar la solicitud HTTP para la que se le llamó. Un controlador asincrónico ejecuta un proceso independientemente del envío de una respuesta al usuario. Los controladores asincrónicos son útiles cuando se necesita iniciar un proceso de aplicación que puede ser largo y el usuario no necesita esperar hasta que éste finalice antes de recibir una respuesta del servidor.

Controladores HTTP integrados en ASP.NET

ASP.NET asigna solicitudes HTTP a controladores HTTP en función de la extensión del nombre de un archivo. Cada controlador HTTP permite el procesamiento de direcciones URL HTTP individuales o grupos de extensiones URL dentro de una aplicación. ASP.NET incluye varios controladores HTTP integrados, como se muestra en la tabla siguiente.

Controlador Descripción

Controlador de páginas ASP.NET (*.aspx)

Controlador HTTP predeterminado para todas las páginas ASP.NET.

Controlador de servicios Web (*.asmx)

Controlador HTTP predeterminado para las páginas de servicios Web creados con ASP.NET.

Controlador de controles de usuario ASP.NET (*.ascx)

Controlador HTTP predeterminado para todas las páginas de controles de usuario ASP.NET.

Controlador de seguimiento (trace.axd)

Controlador que muestra la información de seguimiento de la página actual. Para obtener información detallada, vea Cómo: Ver información de seguimiento de ASP.NET con el visor de seguimiento.

Crear un controlador HTTP personalizado

Para crear un controlador HTTP personalizado, cree una clase que implemente la interfaz IHttpHandler para crear un controlador sincrónico o el IHttpAsyncHandler para crear un controlador asincrónico. Las dos interfaces del controlador requieren que implemente la propiedad IsReusable y el método ProcessRequest. La propiedad IsReusable especifica si el objeto IHttpHandlerFactory (el objeto que llama al controlador apropiado) puede colocar sus controladores en un grupo y reutilizarlos para mejorar el rendimiento, o si debe crea nuevas instancias cada vez que se necesite el controlador. El método ProcessRequest es responsable de procesar las solicitudes HTTP individuales.

Crear una extensión de nombre de archivo

Cuando crea un archivo de clase como su controlador HTTP, puede hacer que su controlador responda a cualquier extensión de nombre de archivo que aún no esté asignada en IIS y en ASP.NET. Por ejemplo, si está creando un controlador HTTP para generar un suministro RSS, puede asignar su controlador a la extensión .rss. Para que ASP.NET sepa el controlador que se debe utilizar para la extensión del nombre de archivo personalizado, la extensión del archivo de la clase del controlador debe asignarse en IIS a ASP.NET y en su aplicación al controlador personalizado.

De forma predeterminada, ASP.NET asigna la extensión del nombre de archivo .ashx a los controladores HTTP personalizados, de la misma manera que asigna la extensión .aspx al controlador de la página ASP.NET. Por consiguiente, si crea una clase de controlador HTTP con la extensión de nombre de archivo .ashx, el controlador se registra automáticamente con IIS y ASP.NET.

Si desea crear una extensión de nombre de archivo personalizado para su controlador, debe registrar de forma explícita la extensión con IIS y ASP.NET. La ventaja de no utilizar la extensión de nombre de archivo .ashx es que el controlador se puede volver a utilizar para diferentes asignaciones de extensiones. Por ejemplo, en una aplicación su controlador de cliente puede responder a solicitudes que terminen en .rss, y en otra aplicación a las solicitudes que terminen en .feed. Otro ejemplo podría ser que su controlador estuviera asignado a ambas extensiones de nombre de archivo en la misma aplicación, pero pueda crear respuestas diferentes basándose en la extensión.

Controladores HTTP asincrónicos

Los controladores HTTP asincrónicos permiten iniciar un proceso externo, como por ejemplo una llamada a un método en un servidor remoto, y después continuar procesando sin esperar a que termine el proceso externo. Durante el procesamiento de un controlador HTTP asincrónico, ASP.NET coloca el subproceso que normalmente se utilizaría para el proceso externo de nuevo en el grupo de subprocesos hasta que el controlador reciba una devolución de llamada del proceso externo. Esto puede evitar el agrupamiento en bloques de los subprocesos y mejorar en gran manera el rendimiento ya que solo es posible ejecutar inmediatamente un número limitado de subprocesos. Si varios usuarios solicitan controladores HTTP sincrónicos que dependan de procesos externos, el sistema operativo puede quedarse sin subprocesos rápidamente porque muchos estarán bloqueados y esperando un proceso externo.

Cuando crea un controlador asincrónico, además de implementar la interfaz IHttpAsyncHandler, debe implementar BeginProcessRequest para iniciar una llamada asincrónica para procesar solicitudes individuales de HTTP. También debe implementar el método EndProcessRequest para ejecutar código de limpieza cuando el proceso finaliza.

Clases IHttpHandlerFactory personalizadas

La clase IHttpHandlerFactory recibe solicitudes y es responsable de reenviar una solicitud a un controlador HTTP adecuado. Puede crear un generador del controlador HTTP personalizado creando una clase que implementa la interfaz IHttpHandlerFactory. Crear un generador del controlador personalizado puede permitir el control más preciso del procesamiento de una solicitud HTTP creando controladores diferentes basados en condiciones en tiempo de ejecución. Por ejemplo, con un generador de controladores HTTP personalizado es posible crear una instancia de un controlador HTTP para un tipo de archivo si el método de solicitudes HTTP es PUT y otro distinto si el método es GET.

Vea también

Mostrar: