Compartir por


Diseño de módulos HTTP de Native-Code

Los módulos HTTP de IIS 7 permiten a los desarrolladores ampliar o reemplazar la funcionalidad principal de IIS. Por ejemplo, podría escribir un módulo de autenticación implícita que reemplace el módulo que se incluye con IIS 7. Aunque algunas de las funcionalidades proporcionadas por los módulos de código nativo pueden parecerse a funcionalidades que estaban disponibles anteriormente con filtros ISAPI, los módulos de código nativo están diseñados de forma diferente y proporcionan un conjunto de características mucho más completo que los filtros ISAPI.

Requisitos para módulos HTTP de código nativo

Agregar una función de registro exportada

Los módulos HTTP son necesarios para exportar una función RegisterModule . Puede exportar esta función mediante la creación de un archivo de definición de módulo (.def) para el proyecto, o bien puede compilar el módulo mediante el modificador /EXPORT:RegisterModule .

Especificación de notificaciones y prioridad de módulo

Al crear tu función RegisterModule, especificas una máscara de bits que contiene una lista de notificaciones que procesará el módulo en el nivel de solicitud (para más información, consulta Constantes de Procesamiento de Solicitudes). Por ejemplo, un módulo de nivel de solicitud podría especificar que proporcionará métodos para procesar la notificación de RQ_BEGIN_REQUEST y la RQ_MAP_PATH posterior a la notificación. Del mismo modo, un módulo de nivel global podría especificar que proporcionará métodos para procesar el GL_APPLICATION_START y las notificaciones de GL_APPLICATION_STOP .

La RegisterModule función también le permite especificar la prioridad del módulo. Las prioridades disponibles son PRIORITY_ALIAS_FIRST, PRIORITY_ALIAS_HIGH, PRIORITY_ALIAS_MEDIUM, PRIORITY_ALIAS_LOWy PRIORITY_ALIAS_LAST. Cuando se registran los módulos, se procesan en orden de prioridad y configuración. Por ejemplo, si crea un módulo HTTP que se registra como módulo de prioridad media, el módulo no se procesará hasta que se hayan procesado todos los módulos de alta prioridad. Puede configurar el módulo para que se procese antes de otros módulos de prioridad media y el módulo se procesará antes de cualquier módulo de prioridad baja.

Nota:

El orden de los niveles de prioridad se invierte para notificaciones RQ_SEND_RESPONSE.

Creación de módulos de Request-Level

Creación de un generador de módulos

Los módulos de nivel de solicitud de código nativo deben proporcionar un generador de módulos que cree una instancia de la clase CHttpModule . El generador de módulos heredará de la interfaz IHttpModuleFactory .

Para obtener más información sobre cómo crear un generador de módulos, vea el ejemplo de código en Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.

Creación de una clase derivada de CHttpModule

La funcionalidad de procesamiento principal para los módulos HTTP de nivel de solicitud se proporciona a través de un módulo derivado de la clase base CHttpModule . Esta clase debe contener un método de devolución de llamada para cada notificación o posnotificación que se lista en la función RegisterModule. Por ejemplo, si su módulo está registrado para la notificación RQ_AUTHENTICATE_REQUEST y la notificación posterior RQ_AUTHORIZE_REQUEST, su clase debe contener los métodos OnAuthenticateRequest y OnPostAuthorizeRequest.

Devolviendo desde métodos CHttpModule

Cuando los métodos de la clase CHttpModule han terminado de procesarse, cada método debe devolver un valor de enumeración REQUEST_NOTIFICATION_STATUS. Este valor determina cómo IIS controlará la condición de salida de los métodos de clase. Por ejemplo, un valor devuelto de RQ_NOTIFICATION_CONTINUE informa a IIS a continuar procesando la solicitud. Por el contrario, un valor devuelto de RQ_NOTIFICATION_FINISH_REQUEST indica a IIS que deje de procesar la solicitud actual.

Limpieza de CHttpModule

Cuando un módulo haya terminado de procesarse, IIS llamará al método CHttpModule::Dispose del módulo para quitar la clase de CHttpModule memoria.

Creación de un módulo de nivel global

Creación de una clase derivada de CGlobalModule

La funcionalidad de procesamiento principal para los módulos HTTP de nivel global se proporciona a través de un módulo derivado de la clase CGlobalModule base. Esta clase debe contener un método de devolución de llamada para cada notificación que aparece en la función RegisterModule. Por ejemplo, si el módulo está registrado para las notificaciones GL_APPLICATION_START y GL_APPLICATION_STOP, la clase debe contener los métodos OnGlobalApplicationStart y OnGlobalApplicationStop.

Devolución desde los métodos de CGlobalModule

Cuando los métodos de la clase CGlobalModule han terminado de procesar, cada método debe devolver un valor de enumeración GLOBAL_NOTIFICATION_STATUS. Este valor determina cómo IIS controlará la condición de salida de los métodos de clase. Por ejemplo, un valor devuelto de GL_NOTIFICATION_CONTINUE informa a IIS para continuar procesando la notificación. Por el contrario, un valor devuelto de GL_NOTIFICATION_HANDLED indica a IIS que deje de procesar la notificación actual.

Limpieza de CGlobalModule

Cuando un módulo haya terminado de procesarse, IIS llamará al método CGlobalModule::Terminate del módulo. El módulo debe usar este método para quitar la clase CGlobalModule de la memoria.

Véase también

Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo
Tutorial: Creación de un módulo HTTP de Global-Level mediante código nativo
Creación de módulos HTTP de Native-Code