Criando módulos HTTP Native-Code
Os módulos HTTP no IIS 7 permitem que os desenvolvedores estendam ou substituam a funcionalidade principal do IIS. Por exemplo, você pode escrever um módulo de autenticação de resumo que substitui o módulo incluído no IIS 7. Embora algumas das funcionalidades fornecidas por módulos de código nativo possam ser semelhantes à funcionalidade que estava disponível anteriormente com filtros ISAPI, os módulos de código nativo são projetados de forma diferente e fornecem um conjunto de recursos muito mais rico do que os filtros ISAPI.
Requisitos para módulos HTTP Native-Code
Adicionando uma função de registro exportada
Módulos HTTP são necessários para exportar uma função RegisterModule . Você pode exportar essa função criando um arquivo de definição de módulo (.def) para seu projeto ou pode compilar o módulo usando a opção /EXPORT:RegisterModule .
Especificando notificações e prioridade do módulo
Ao criar sua RegisterModule
função, você especifica uma máscara de bits que contém uma lista de notificações que seu módulo no nível da solicitação processará (para obter mais informações, consulte Constantes de processamento de solicitações). Por exemplo, um módulo no nível da solicitação pode especificar que ele fornecerá métodos para processar a notificação de RQ_BEGIN_REQUEST e o RQ_MAP_PATH após a notificação. Da mesma forma, um módulo de nível global pode especificar que ele fornecerá métodos para processar o GL_APPLICATION_START e as notificações de GL_APPLICATION_STOP .
A RegisterModule
função também permite especificar a prioridade para o módulo. As prioridades disponíveis são PRIORITY_ALIAS_FIRST
, PRIORITY_ALIAS_HIGH
, PRIORITY_ALIAS_MEDIUM
, PRIORITY_ALIAS_LOW
e PRIORITY_ALIAS_LAST
. Quando os módulos são registrados, eles são processados em ordem de prioridade e configuração. Por exemplo, se você criar um módulo HTTP que se registra como um módulo de prioridade média, seu módulo não será processado até que todos os módulos de alta prioridade tenham sido processados. Você pode configurar seu módulo para ser processado antes de outros módulos de prioridade média e seu módulo será processado antes de qualquer módulo de baixa prioridade.
Observação
A ordem dos níveis de prioridade é invertida para RQ_SEND_RESPONSE
notificações.
Criando módulos de Request-Level
Criando uma fábrica de módulos
Os módulos de nível de solicitação de código nativo devem fornecer uma fábrica de módulos que crie uma instância da classe CHttpModule . A fábrica de módulos herdará da interface IHttpModuleFactory .
Para obter mais informações sobre como criar uma fábrica de módulos, consulte o exemplo de código em Passo a passo: criando um módulo HTTP Request-Level usando código nativo.
Criando uma classe derivada de CHttpModule
A funcionalidade de processamento main para módulos HTTP no nível da solicitação é fornecida por meio de um módulo derivado da classe baseCHttpModule
. Essa classe deve conter um método de retorno de chamada para cada notificação ou pós-notificação listada na RegisterModule
função. Por exemplo, se o módulo estiver registrado para a notificação de RQ_AUTHENTICATE_REQUEST e o RQ_AUTHORIZE_REQUEST pós-notificação, sua classe deverá conter os métodos OnAuthenticateRequest e OnPostAuthorizeRequest .
Retornando dos métodos CHttpModule
Quando os métodos na classe terminarem o CHttpModule
processamento, cada método deverá retornar um valor de enumeração REQUEST_NOTIFICATION_STATUS . Esse valor determina como o IIS lidará com a condição de saída dos métodos de classe. Por exemplo, um valor retornado de RQ_NOTIFICATION_CONTINUE informa o IIS para continuar processando a solicitação. Por outro lado, um valor retornado de RQ_NOTIFICATION_FINISH_REQUEST instrui o IIS a interromper o processamento na solicitação atual.
Limpeza de CHttpModule
Quando um módulo terminar de processar, o IIS chamará o método CHttpModule::D ispose do módulo para remover a CHttpModule
classe da memória.
Criando um módulo de Global-Level
Criando uma classe derivada de CGlobalModule
A funcionalidade de processamento main para módulos HTTP de nível global é fornecida por meio de um módulo derivado da classe base CGlobalModule. Essa classe deve conter um método de retorno de chamada para cada notificação listada na RegisterModule
função. Por exemplo, se o módulo estiver registrado para o GL_APPLICATION_START e as notificações de GL_APPLICATION_STOP , sua classe deverá conter os métodos OnGlobalApplicationStart e OnGlobalApplicationStop .
Retornando dos métodos CGlobalModule
Quando os métodos na classe terminarem o CGlobalModule
processamento, cada método deverá retornar um valor de enumeração GLOBAL_NOTIFICATION_STATUS. Esse valor determina como o IIS lidará com a condição de saída dos métodos de classe. Por exemplo, um valor retornado de GL_NOTIFICATION_CONTINUE informa o IIS para continuar processando a notificação. Por outro lado, um valor retornado de GL_NOTIFICATION_HANDLED instrui o IIS a interromper o processamento na notificação atual.
Limpeza de CGlobalModule
Quando um módulo terminar de processar, o IIS chamará o método CGlobalModule::Terminate do módulo. Seu módulo deve usar esse método para remover sua CGlobalModule
classe da memória.
Consulte Também
Passo a passo: criando um módulo HTTP Request-Level usando código nativo
Passo a passo: criando um módulo HTTP Global-Level usando código nativo
Criando módulos HTTP Native-Code