Compartir a través de


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 funciones proporcionadas por los módulos de código nativo pueden parecerse a la funcionalidad que anteriormente estaba disponible 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 Native-Code

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 del módulo

Al crear la RegisterModule función, se especifica una máscara de bits que contiene una lista de notificaciones que procesará el módulo de nivel de solicitud (para obtener más información, vea 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 un 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 RQ_SEND_RESPONSE las notificaciones.

Creación de módulos de Request-Level

Creación de una factoría 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, consulte el ejemplo de código en Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.

Crear 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 que se deriva de la clase base CHttpModule . Esta clase debe contener un método de devolución de llamada para cada notificación o notificación posterior que aparezca en la RegisterModule función . Por ejemplo, si el módulo está registrado para la notificación de RQ_AUTHENTICATE_REQUEST y la RQ_AUTHORIZE_REQUEST posterior a la notificación, la clase debe contener métodos OnAuthenticateRequest y OnPostAuthorizeRequest .

Devolución de métodos CHttpModule

Cuando los métodos de la clase han terminado de CHttpModule 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 de que continúe procesando la solicitud. Por el contrario, un valor devuelto de RQ_NOTIFICATION_FINISH_REQUEST indica a IIS que deje de procesarse en la solicitud actual.

Limpieza de CHttpModule

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

Creación de un módulo de Global-Level

Crear 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 que se deriva de la clase CGlobalModule base. Esta clase debe contener un método de devolución de llamada para cada notificación que aparezca en la RegisterModule función . Por ejemplo, si el módulo está registrado para el GL_APPLICATION_START y las notificaciones de GL_APPLICATION_STOP , la clase debe contener métodos OnGlobalApplicationStart y OnGlobalApplicationStop .

Devolución de métodos CGlobalModule

Cuando los métodos de la clase han terminado de CGlobalModule procesarse, 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 de continuar procesando la notificación. Por el contrario, un valor devuelto de GL_NOTIFICATION_HANDLED indica a IIS que deje de procesarse en 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 CGlobalModule clase de la memoria.

Consulte 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