Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 fornecido pelo 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 de Código Nativo
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 o 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 em nível de solicitação pode especificar que ele fornecerá métodos para processar a notificação de RQ_BEGIN_REQUEST e a notificação de pós-processamento RQ_MAP_PATH. 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ãoPRIORITY_ALIAS_FIRST, , PRIORITY_ALIAS_HIGH, PRIORITY_ALIAS_MEDIUMe PRIORITY_ALIAS_LOWPRIORITY_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 para notificações RQ_SEND_RESPONSE é invertida.
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 principal funcionalidade de processamento para módulos HTTP no nível da solicitação é fornecida por meio de um módulo derivado da classe base CHttpModule . Essa classe deve conter um método de retorno de chamada para cada notificação ou pós-notificação que é listada na função RegisterModule. Por exemplo, se o módulo estiver registrado para a notificação RQ_AUTHENTICATE_REQUEST e para a pós-notificação RQ_AUTHORIZE_REQUEST, sua classe deverá conter os métodos OnAuthenticateRequest e OnPostAuthorizeRequest.
Retornando dos métodos CHttpModule
Quando os métodos da classe CHttpModule terminarem o 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 tiver concluído o processamento, 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 Nível Global
Criando uma classe derivada de CGlobalModule
A principal funcionalidade de processamento para módulos HTTP de nível global é fornecida por meio de um módulo derivado da classe CGlobalModule base. Essa classe deve conter um callback para cada notificação listada na função RegisterModule. Por exemplo, se o módulo estiver registrado para o GL_APPLICATION_START e as notificações GL_APPLICATION_STOP , sua classe deverá conter os métodos OnGlobalApplicationStart e OnGlobalApplicationStop .
Retornando dos métodos CGlobalModule
Quando os métodos na classe CGlobalModule concluírem o 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 o processamento, 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