Compartilhar via


Método CHttpModule::OnExecuteRequestHandler

Representa o método que manipulará um ExecuteRequestHandler evento, que ocorre quando o IIS executa o manipulador para a solicitação atual.

Sintaxe

virtual REQUEST_NOTIFICATION_STATUS OnExecuteRequestHandler(  
   IN IHttpContext* pHttpContext,  
   IN IHttpEventProvider* pProvider  
);  

Parâmetros

pHttpContext
[IN] Um ponteiro para uma interface IHttpContext .

pProvider
[IN] Um ponteiro para uma interface IHttpEventProvider .

Valor Retornado

Um valor REQUEST_NOTIFICATION_STATUS .

Comentários

Quando um módulo de nível de solicitação é registrado para o RQ_EXECUTE_REQUEST_HANDLER notificação de evento, o IIS chamará o método do OnExecuteRequestHandler módulo quando ele executar o manipulador apropriado para a solicitação atual.

Observação

Os módulos no nível da solicitação podem se registrar para a ExecuteRequestHandler notificação de evento registrando-se RQ_EXECUTE_REQUEST_HANDLER na função RegisterModule do módulo.

Exemplo

O exemplo de código a seguir demonstra como criar um módulo HTTP no nível da solicitação que se registra para o RQ_EXECUTE_REQUEST_HANDLER evento e as notificações pós-evento. Quando o IIS executar o manipulador apropriado para uma solicitação, ele chamará os métodos onPostExecuteRequestHandler do OnExecuteRequestHandler módulo de exemplo. Cada método gravará uma entrada no log de aplicativos da Visualizador de Eventos do Windows. Quando o processamento for concluído, o módulo será encerrado.

#define _WINSOCKAPI_
#include <windows.h>
#include <sal.h>
#include <httpserv.h>

// Create the module class.
class MyHttpModule : public CHttpModule
{
public:

    // Process an RQ_EXECUTE_REQUEST_HANDLER event.
    REQUEST_NOTIFICATION_STATUS
    OnExecuteRequestHandler(
        IN IHttpContext * pHttpContext,
        IN IHttpEventProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pHttpContext );
        UNREFERENCED_PARAMETER( pProvider );
        WriteEventViewerLog("OnExecuteRequestHandler");
        return RQ_NOTIFICATION_CONTINUE;
    }

    // Process an RQ_EXECUTE_REQUEST_HANDLER post-event.
    REQUEST_NOTIFICATION_STATUS
    OnPostExecuteRequestHandler(
        IN IHttpContext * pHttpContext,
        IN IHttpEventProvider * pProvider
    )
    {
        UNREFERENCED_PARAMETER( pHttpContext );
        UNREFERENCED_PARAMETER( pProvider );
        WriteEventViewerLog("OnPostExecuteRequestHandler");
        return RQ_NOTIFICATION_CONTINUE;
    }

    MyHttpModule()
    {
        // Open a handle to the Event Viewer.
        m_hEventLog = RegisterEventSource( NULL,"IISADMIN" );
    }

    ~MyHttpModule()
    {
        // Test whether the handle for the Event Viewer is open.
        if (NULL != m_hEventLog)
        {
            // Close the handle to the Event Viewer.
            DeregisterEventSource( m_hEventLog );
            m_hEventLog = NULL;
        }
    }

private:

    // Create a handle for the event viewer.
    HANDLE m_hEventLog;

    // Define a method that writes to the Event Viewer.
    BOOL WriteEventViewerLog(LPCSTR szNotification)
    {
        // Test whether the handle for the Event Viewer is open.
        if (NULL != m_hEventLog)
        {
            // Write any strings to the Event Viewer and return.
            return ReportEvent(
                m_hEventLog,
                EVENTLOG_INFORMATION_TYPE, 0, 0,
                NULL, 1, 0, &szNotification, NULL );
        }
        return FALSE;
    }
};

// Create the module's class factory.
class MyHttpModuleFactory : public IHttpModuleFactory
{
public:
    HRESULT
    GetHttpModule(
        OUT CHttpModule ** ppModule, 
        IN IModuleAllocator * pAllocator
    )
    {
        UNREFERENCED_PARAMETER( pAllocator );

        // Create a new instance.
        MyHttpModule * pModule = new MyHttpModule;

        // 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(
        // Specify the class factory.
        new MyHttpModuleFactory,
        // Specify the event notifications.
        RQ_EXECUTE_REQUEST_HANDLER,
        // Specify the post-event notifications.
        RQ_EXECUTE_REQUEST_HANDLER
    );
}

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

Tipo 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

Consulte Também

Classe CHttpModule
Método CHttpModule::OnPostExecuteRequestHandler