Compartir a través de


IHttpEventProvider (interfaz)

Proporciona una interfaz genérica de informes de eventos.

Sintaxis

class IHttpEventProvider  

Métodos

En la tabla siguiente se enumeran los métodos expuestos por la IHttpEventProvider clase .

Nombre Descripción
SetErrorStatus Especifica un error que se va a devolver.

Clases derivadas

En la tabla siguiente se enumeran las clases derivadas expuestas por la IHttpEventProvider interfaz .

Nombre Descripción
IAuthenticationProvider Proporciona una interfaz para RQ_REQUEST_AUTHENTICATE notificaciones de eventos.
ICacheProvider Proporciona una interfaz para GL_CACHE_OPERATION notificaciones de eventos.
ICustomNotificationProvider Proporciona una interfaz para GL_CUSTOM_NOTIFCATION y RQ_CUSTOM_NOTIFCATION notificaciones de eventos.
IGlobalConfigurationChangeProvider Proporciona una interfaz para GL_CONFIGURATION_CHANGE notificaciones de eventos.
IGlobalFileChangeProvider Proporciona una interfaz para GL_FILE_CHANGE notificaciones de eventos.
IGlobalRSCAQueryProvider Proporciona una interfaz para GL_RSCA_QUERY notificaciones de eventos.
IGlobalStopListeningProvider Proporciona una interfaz para GL_STOP_LISTENING notificaciones de eventos.
IGlobalThreadCleanupProvider Proporciona una interfaz para GL_THREAD_CLEANUP notificaciones de eventos.
IGlobalTraceEventProvider Proporciona una interfaz para GL_TRACE_EVENT notificaciones de eventos.
IHttpApplicationProvider Proporciona una interfaz para GL_APPLICATION_START notificaciones de eventos.
IMapHandlerProvider Proporciona una interfaz para RQ_DETERMINE_HANDLER notificaciones de eventos.
IMapPathProvider Proporciona una interfaz para RQ_MAP_PATH notificaciones de eventos.
IPreBeginRequestProvider Proporciona una interfaz para GL_PRE_BEGIN_REQUEST notificaciones de eventos.
IReadEntityProvider Proporciona una interfaz para RQ_READ_ENTITY notificaciones de eventos.
ISendResponseProvider Proporciona una interfaz para RQ_SEND_RESPONSE notificaciones de eventos.

Comentarios

La IHttpEventProvider interfaz proporciona la interfaz genérica de informes de eventos para la mayoría de los métodos de notificación y sirve como clase primaria para las interfaces de informes de eventos que se usan con las notificaciones restantes.

La IHttpEventProvider interfaz expone solo el método SetErrorStatus , que establece el estado de error para el contexto actual. Varias de las clases derivadas que se heredan de IHttpEventProvider exponen métodos adicionales específicos de sus respectivos eventos.

Ejemplo

En el ejemplo de código siguiente se muestra cómo crear un módulo HTTP que envía una cadena de ejemplo al cliente web y captura el valor devuelto de esta operación. El módulo usa el SetErrorStatus método para especificar el valor devuelto como estado de error para la solicitud actual y, a continuación, se cierra.

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

// Create the module class.
class MyHttpModule : public CHttpModule
{
public:
    REQUEST_NOTIFICATION_STATUS
    OnBeginRequest(
        IN IHttpContext * pHttpContext,
        IN IHttpEventProvider * pProvider
    )
    {
        // Create an HRESULT to receive return values from methods.
        HRESULT hr;

        // Clear the existing response.
        pHttpContext->GetResponse()->Clear();
        // Set the MIME type to plain text.
        pHttpContext->GetResponse()->SetHeader(
            HttpHeaderContentType,"text/plain",
            (USHORT)strlen("text/plain"),TRUE);

        // Return a simple message to the Web client.
        hr = WriteResponseMessage(pHttpContext,"Hello World!");

        // Set the error status for the module.
        pProvider->SetErrorStatus( hr );

        // End additional processing.
        return RQ_NOTIFICATION_FINISH_REQUEST;
    }

private:

    // Create a utility method that inserts a string value into the response.
    HRESULT WriteResponseMessage(
        IHttpContext * pHttpContext,
        PCSTR pszBuffer
    )
    {
        // Create an HRESULT to receive return values from methods.
        HRESULT hr;
        
        // 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 = pHttpContext->GetResponse()->WriteEntityChunks(
            &dataChunk,1,FALSE,TRUE,&cbSent);
        // Test for an error.
        if (FAILED(hr))
        {
            // Return the error status.
            return hr;
        }

        // Return a success status.
        return S_OK;
    }
};

// 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(
        new MyHttpModuleFactory,
        RQ_BEGIN_REQUEST,
        0
    );
}

El módulo debe exportar la 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 /EXPORT:RegisterModule modificador . Para obtener más información, vea Tutorial: Creación de un módulo HTTP de Request-Level mediante código nativo.

Opcionalmente, puede compilar el código mediante la __stdcall (/Gz) convención de llamada en lugar de declarar explícitamente la convención de llamada para cada función.

Requisitos

Tipo Descripción
Remoto - IIS 7.0 en Windows Vista
- IIS 7.5 en Windows 7
- IIS 8.0 en Windows 8
- IIS 10.0 en Windows 10
Servidor - IIS 7.0 en Windows Server 2008
- IIS 7.5 en Windows Server 2008 R2
- IIS 8.0 en Windows Server 2012
- IIS 8.5 en Windows Server 2012 R2
- IIS 10.0 en Windows Server 2016
Producto - 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
Encabezado Httpserv.h

Consulte también

Interfaces básicas de servidor web
IAuthenticationProvider (Interfaz)
ICacheProvider (interfaz)
ICustomNotificationProvider (Interfaz)
IGlobalConfigurationChangeProvider (Interfaz)
IGlobalFileChangeProvider (Interfaz)
IGlobalRSCAQueryProvider (Interfaz)
IGlobalStopListeningProvider (Interfaz)
IGlobalThreadCleanupProvider (Interfaz)
IGlobalTraceEventProvider (Interfaz)
IHttpApplicationProvider (Interfaz)
IMapHandlerProvider (interfaz)
IMapPathProvider (interfaz)
IPreBeginRequestProvider (Interfaz)
IReadEntityProvider (Interfaz)
Interfaz ISendResponseProvider