Classe CHttpModule
Define a classe base para módulos HTTP no nível da solicitação.
Syntax
class CHttpModule
Métodos
A tabela a seguir lista os métodos expostos pela CHttpModule
classe .
Nome | Descrição |
---|---|
~CHttpModule | Desaloca uma instância da CHttpModule classe . |
CHttpModule | Inicializa uma nova instância da classe CHttpModule . |
Dispose | Libera todos os recursos usados pela instância atual da classe CHttpModule . |
OnAcquireRequestState | Representa o método que manipulará um AcquireRequestState evento, que ocorre quando o IIS recupera o estado da solicitação atual. |
OnAsyncCompletion | Representa o método que manipulará um evento de conclusão assíncrona, que ocorre após a conclusão do processamento de uma operação assíncrona. |
OnAuthenticateRequest | Representa o método que manipulará um AuthenticateRequest evento, que ocorre quando o IIS estabelece a identidade de um usuário. |
OnAuthorizeRequest | Representa o método que manipulará um AuthorizeRequest evento, que ocorre quando o IIS verifica a autorização do usuário. |
OnBeginRequest | Representa o método que manipulará um BeginRequest evento, que ocorre como o primeiro evento no pipeline de processamento de solicitações integrado a HTTP para a solicitação atual. |
OnCustomRequestNotification | Representa o método que manipulará um evento personalizado, que ocorre quando um módulo gera uma notificação definida pelo usuário. |
OnEndRequest | Representa o método que manipulará um EndRequest evento, que ocorre como o último evento no pipeline de processamento de solicitações integrado a HTTP para a solicitação atual. |
OnExecuteRequestHandler | Representa o método que manipulará um ExecuteRequestHandler evento, que ocorre quando o IIS executa o manipulador para a solicitação atual. |
OnLogRequest | Representa o método que manipulará um LogRequest evento, que ocorre quando o IIS se prepara para registrar a solicitação atual. |
OnMapPath | Representa o método que manipulará um MapPath evento, que ocorre quando uma operação solicita que o caminho físico seja mapeado para a solicitação atual. |
OnMapRequestHandler | Representa o método que manipulará um MapRequestHandler evento, que ocorre quando o IIS mapeia a solicitação atual para um manipulador de eventos. |
OnPostAcquireRequestState | Representa o método que manipulará um AcquireRequestState pós-evento, que ocorre depois que o IIS recuperar o estado da solicitação atual. |
OnPostAuthenticateRequest | Representa o método que manipulará um AuthenticateRequest pós-evento, que ocorre depois que o IIS estabeleceu a identidade de um usuário. |
OnPostAuthorizeRequest | Representa o método que manipulará um AuthorizeRequest pós-evento, que ocorre após o IIS ter verificado a autorização do usuário. |
OnPostBeginRequest | Representa o método que manipulará um BeginRequest pós-evento, que ocorre após o primeiro evento no pipeline de processamento de solicitação integrado a HTTP. |
OnPostEndRequest | Representa o método que manipulará um EndRequest pós-evento, que ocorre após o último evento no pipeline de processamento de solicitação integrado a HTTP para a solicitação atual. |
OnPostExecuteRequestHandler | Representa o método que manipulará um ExecuteRequestHandler pós-evento, que ocorre após o IIS executar o manipulador para a solicitação atual. |
OnPostLogRequest | Representa o método que manipulará um LogRequest pós-evento, que ocorre após o IIS ter registrado a solicitação atual. |
OnPostMapRequestHandler | Representa o método que manipulará um MapRequestHandler pós-evento, que ocorre depois que o IIS mapeou a solicitação atual para o manipulador de eventos apropriado. |
OnPostPreExecuteRequestHandler | Representa o método que manipulará um PreExecuteRequestHandler pós-evento, que ocorre antes do IIS executar um manipulador de solicitação. |
OnPostReleaseRequestState | Representa o método que manipulará um ReleaseRequestState pós-evento, que ocorre após o lançamento do estado atual. |
OnPostResolveRequestCache | Representa o método que manipulará um ResolveRequestCache pós-evento, que ocorre depois que o IIS resolveu uma solicitação do cache. |
OnPostUpdateRequestCache | Representa o método que manipulará um UpdateRequestCache pós-evento, que ocorre depois que o IIS armazenar a solicitação no cache. |
OnPreExecuteRequestHandler | Representa o método que manipulará um PreExecuteRequestHandler evento, que ocorre antes que o IIS execute um manipulador de solicitação. |
OnReadEntity | Representa o método que manipulará um ReadEntity evento, que ocorre quando uma operação lê dados do buffer de solicitação. |
OnReleaseRequestState | Representa o método que manipulará um ReleaseRequestState evento, que ocorre quando o estado atual é liberado. |
OnResolveRequestCache | Representa o método que manipulará um ResolveRequestCache evento, que ocorre quando o IIS resolve uma solicitação no cache. |
OnSendResponse | Representa o método que manipulará um SendResponse evento, que ocorre quando o IIS envia o buffer de resposta. |
OnUpdateRequestCache | Representa o método que manipulará um UpdateRequestCache evento, que ocorre quando o IIS armazena a solicitação no cache. |
Classes derivadas
Essa classe não contém classes derivadas.
Comentários
A CHttpModule
classe é a classe base para módulos HTTP no nível da solicitação. Para criar uma CHttpModule
classe derivada de , você precisa criar um módulo HTTP no nível da solicitação que contenha uma classe que herda de CHttpModule
e uma classe que deriva da interface IHttpModuleFactory . Para obter mais informações sobre como criar módulos HTTP, consulte Criando módulos HTTP Native-Code.
A CHttpModule
classe fornece métodos de construtor e destruidor protegidos e um método público Dispose
. No final da solicitação, o Dispose
método é chamado para excluir a instância da CHttpModule
classe derivada de .
A CHttpModule
classe também define os métodos específicos de notificação que o IIS 7 chama quando processa eventos no nível da solicitação dentro do pipeline de processamento de solicitação integrado. Um módulo HTTP pode se registrar para eventos específicos definindo uma lista de notificações na função RegisterModule exportada de um módulo.
Eventos de solicitação determinística
A maioria dos métodos de notificação no nível da solicitação é processada cronologicamente durante o fluxo normal de eventos no nível da solicitação dentro do pipeline integrado. Cada um dos métodos de notificação determinística no nível da solicitação tem uma notificação pós-evento correspondente, que permite que módulos HTTP sejam processados quando um evento ocorrer ou imediatamente após o evento ocorrer.
A tabela a seguir lista os métodos de notificação de evento no nível da solicitação cronológica e pós-evento na ordem de sua ocorrência dentro do pipeline integrado.
Método de notificação de evento | Método de notificação pós-evento |
---|---|
OnBeginRequest |
OnPostBeginRequest |
OnAuthenticateRequest |
OnPostAuthenticateRequest |
OnAuthorizeRequest |
OnPostAuthorizeRequest |
OnResolveRequestCache |
OnPostResolveRequestCache |
OnMapRequestHandler |
OnPostMapRequestHandler |
OnAcquireRequestState |
OnPostAcquireRequestState |
OnPreExecuteRequestHandler |
OnPostPreExecuteRequestHandler |
OnExecuteRequestHandler |
OnPostExecuteRequestHandler |
OnReleaseRequestState |
OnPostReleaseRequestState |
OnUpdateRequestCache |
OnPostUpdateRequestCache |
OnLogRequest |
OnPostLogRequest |
OnEndRequest |
OnPostEndRequest |
Por exemplo, OnBeginRequest
ocorre antes OnAuthenticateRequest
de , OnMapRequestHandler
ocorrer antes OnAcquireRequestState
de e assim por diante.
Observação
As notificações pós-evento ocorrem antes da próxima notificação em nível de solicitação cronológica. Por exemplo, OnPostAuthenticateRequest
ocorre antes OnAuthorizeRequest
de , OnPostUpdateRequestCache
ocorrer antes OnLogRequest
de e assim por diante.
Eventos de solicitação não determinística
Os métodos de notificação de nível de solicitação restantes não são processados em nenhuma ordem específica; Em vez disso, o IIS processa esses eventos quando ocorre um evento não determinístico específico. A tabela a seguir lista o evento não determinístico no nível da solicitação e todos os métodos de notificação pós-evento relacionados.
Método de notificação de evento | Método de notificação pós-evento |
---|---|
OnAsyncCompletion |
(Nenhum) 1 |
OnCustomRequestNotification |
(Nenhum) 2 |
OnMapPath |
(Nenhuma) |
OnReadEntity |
(Nenhuma) |
OnSendResponse |
(Nenhuma) |
1 O OnAsyncCompletion
método é chamado quando ocorre um evento assíncrono em um módulo HTTP. Dessa forma, você não pode se registrar para uma notificação assíncrona usando a função RegisterModule exportada de um módulo. Em vez disso, seu módulo forneceria um OnAsyncCompletion
método para processar notificações que ocorrem após chamar métodos que retornam de forma assíncrona (por exemplo, os métodos IHttpContext::ExecuteRequest e IHttpResponse::WriteEntityChunks ). Quando o IIS chama OnAsyncCompletion
, o método passará parâmetros que indicam o tipo de notificação e se a notificação foi para um evento ou pós-evento.
2 O OnCustomRequestNotification
método não tem um método de notificação pós-evento correspondente. Um módulo HTTP pode se registrar para uma notificação personalizada usando a função exportada RegisterModule
do módulo, mas um módulo não pode se registrar para uma notificação que ocorre após a ocorrência de uma notificação personalizada.
Exemplo
O exemplo a seguir demonstra como criar um módulo HTTP "Olá, Mundo" simples. O módulo define uma função exportada RegisterModule
que passa uma instância de uma IHttpModuleFactory
interface para o método IHttpModuleRegistrationInfo::SetRequestNotifications e registra para a notificação de RQ_BEGIN_REQUEST . O IIS usa o método IHttpModuleFactory::GetHttpModule para criar uma instância de uma CHttpModule
classe e retorna um status de êxito. O IIS também usa o método IHttpModuleFactory::Terminate para remover a fábrica da memória.
Quando ocorre uma RQ_BEGIN_REQUEST
notificação, o IIS chama o método do OnBeginRequest
módulo para processar a solicitação atual. OnBeginRequest
limpa o buffer de resposta e modifica o tipo MIME para a resposta. Em seguida, o método cria uma parte de dados que contém uma cadeia de caracteres "Olá, Mundo" e retorna a cadeia de caracteres para um cliente Web. Por fim, o módulo retorna um indicador status que notifica o IIS de que todas as notificações foram concluídas e, em seguida, são encerradas.
#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>
// Create the module class.
class CHelloWorld : public CHttpModule
{
public:
REQUEST_NOTIFICATION_STATUS
OnBeginRequest(
IN IHttpContext * pHttpContext,
IN IHttpEventProvider * pProvider
)
{
UNREFERENCED_PARAMETER( pProvider );
// Create an HRESULT to receive return values from methods.
HRESULT hr;
// Retrieve a pointer to the response.
IHttpResponse * pHttpResponse = pHttpContext->GetResponse();
// Test for an error.
if (pHttpResponse != NULL)
{
// Clear the existing response.
pHttpResponse->Clear();
// Set the MIME type to plain text.
pHttpResponse->SetHeader(
HttpHeaderContentType,"text/plain",
(USHORT)strlen("text/plain"),TRUE);
// Create a string with the response.
PCSTR pszBuffer = "Hello World!";
// Create a data chunk.
HTTP_DATA_CHUNK dataChunk;
// Set the chunk to a chunk in memory.
dataChunk.DataChunkType = HttpDataChunkFromMemory;
// Buffer for bytes written of data chunk.
DWORD cbSent;
// Set the chunk to the buffer.
dataChunk.FromMemory.pBuffer =
(PVOID) pszBuffer;
// Set the chunk size to the buffer size.
dataChunk.FromMemory.BufferLength =
(USHORT) strlen(pszBuffer);
// Insert the data chunk into the response.
hr = pHttpResponse->WriteEntityChunks(
&dataChunk,1,FALSE,TRUE,&cbSent);
// Test for an error.
if (FAILED(hr))
{
// Set the HTTP status.
pHttpResponse->SetStatus(500,"Server Error",0,hr);
}
// End additional processing.
return RQ_NOTIFICATION_FINISH_REQUEST;
}
// Return processing to the pipeline.
return RQ_NOTIFICATION_CONTINUE;
}
};
// Create the module's class factory.
class CHelloWorldFactory : public IHttpModuleFactory
{
public:
HRESULT
GetHttpModule(
OUT CHttpModule ** ppModule,
IN IModuleAllocator * pAllocator
)
{
UNREFERENCED_PARAMETER( pAllocator );
// Create a new instance.
CHelloWorld * pModule = new CHelloWorld;
// Test for an error.
if (!pModule)
{
// Return an error if the factory cannot create the instance.
return HRESULT_FROM_WIN32( ERROR_NOT_ENOUGH_MEMORY );
}
else
{
// Return a pointer to the module.
*ppModule = pModule;
pModule = NULL;
// Return a success status.
return S_OK;
}
}
void
Terminate()
{
// Remove the class from memory.
delete this;
}
};
// Create the module's exported registration function.
HRESULT
__stdcall
RegisterModule(
DWORD dwServerVersion,
IHttpModuleRegistrationInfo * pModuleInfo,
IHttpServer * pGlobalInfo
)
{
UNREFERENCED_PARAMETER( dwServerVersion );
UNREFERENCED_PARAMETER( pGlobalInfo );
// Set the request notifications and exit.
return pModuleInfo->SetRequestNotifications(
new CHelloWorldFactory,
RQ_BEGIN_REQUEST,
0
);
}
Seu módulo deve exportar a RegisterModule
função. 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
. Para obter mais informações, consulte Passo a passo: criando um módulo HTTP Request-Level usando código nativo.
Opcionalmente, você pode compilar o código usando a __stdcall (/Gz)
convenção de chamada em vez de declarar explicitamente a convenção de chamada para cada função.
Requisitos
Type | Descrição |
---|---|
Cliente | – IIS 7.0 no Windows Vista – IIS 7.5 no Windows 7 – IIS 8.0 no Windows 8 – IIS 10.0 no Windows 10 |
Servidor | – IIS 7.0 no Windows Server 2008 – IIS 7.5 no Windows Server 2008 R2 – IIS 8.0 no Windows Server 2012 – IIS 8.5 no Windows Server 2012 R2 – IIS 10.0 no Windows Server 2016 |
Produto | - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0 - IIS Express 7.5, IIS Express 8.0, IIS Express 10.0 |
parâmetro | Httpserv.h |