共用方式為


IHttpEventProvider 介面

提供泛型附隨報告介面。

Syntax

class IHttpEventProvider  

方法

下表列出 類別所 IHttpEventProvider 公開的方法。

名稱 描述
SetErrorStatus 指定要傳回的錯誤。

衍生類別

下表列出 介面所公開的 IHttpEventProvider 衍生類別。

名稱 描述
IAuthenticationProvider 提供 RQ_REQUEST_AUTHENTICATE 事件通知的介面。
ICacheProvider 提供 GL_CACHE_OPERATION 事件通知的介面。
ICustomNotificationProvider 提供 GL_CUSTOM_NOTIFCATIONRQ_CUSTOM_NOTIFCATION 事件通知的介面。
IGlobalConfigurationChangeProvider 提供 GL_CONFIGURATION_CHANGE 事件通知的介面。
IGlobalFileChangeProvider 提供 GL_FILE_CHANGE 事件通知的介面。
IGlobalRSCAQueryProvider 提供 GL_RSCA_QUERY 事件通知的介面。
IGlobalStopListeningProvider 提供 GL_STOP_LISTENING 事件通知的介面。
IGlobalThreadCleanupProvider 提供 GL_THREAD_CLEANUP 事件通知的介面。
IGlobalTraceEventProvider 提供 GL_TRACE_EVENT 事件通知的介面。
IHttpApplicationProvider 提供 GL_APPLICATION_START 事件通知的介面。
IMapHandlerProvider 提供 RQ_DETERMINE_HANDLER 事件通知的介面。
IMapPathProvider 提供 RQ_MAP_PATH 事件通知的介面。
IPreBeginRequestProvider 提供 GL_PRE_BEGIN_REQUEST 事件通知的介面。
IReadEntityProvider 提供 RQ_READ_ENTITY 事件通知的介面。
ISendResponseProvider 提供 RQ_SEND_RESPONSE 事件通知的介面。

備註

介面 IHttpEventProvider 會為大部分通知方法提供泛型附隨報告介面,並做為與其余通知搭配使用之附隨報告介面的父類別。

介面 IHttpEventProvider 只會公開 SetErrorStatus 方法,這會設定目前內容的錯誤狀態。 繼承自 IHttpEventProvider 的數個衍生類別會公開其個別事件特有的其他方法。

範例

下列程式碼範例示範如何建立 HTTP 模組,以將範例字串傳送至 Web 用戶端,並從這項作業擷取傳回值。 模組會 SetErrorStatus 使用 方法,將傳回值指定為目前要求的錯誤狀態,然後結束。

#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
    );
}

您的模組必須匯出 RegisterModule 函式。 您可以為專案建立模組定義 (.def) 檔案,或使用 參數編譯模組 /EXPORT:RegisterModule 來匯出此函式。 如需詳細資訊,請參閱 逐步解說:使用機器碼建立 Request-Level HTTP 模組

您可以選擇性地使用呼叫慣例編譯器代碼, __stdcall (/Gz) 而不是明確宣告每個函式的呼叫慣例。

規格需求

類型 描述
Client - Windows Vista 上的 IIS 7.0
- Windows 7 上的 IIS 7.5
- Windows 8 上的 IIS 8.0
- Windows 10上的 IIS 10.0
伺服器 - Windows Server 2008 上的 IIS 7.0
- Windows Server 2008 R2 上的 IIS 7.5
- Windows Server 2012 上的 IIS 8.0
- Windows Server 2012 R2 上的 IIS 8.5
- Windows Server 2016上的 IIS 10.0
產品 - 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
標頭 Httpserv.h

另請參閱

Web Server Core 介面
IAuthenticationProvider 介面
ICacheProvider 介面
ICustomNotificationProvider 介面
IGlobalConfigurationChangeProvider 介面
IGlobalFileChangeProvider 介面
IGlobalRSCAQueryProvider 介面
IGlobalStopListeningProvider 介面
IGlobalThreadCleanupProvider 介面
IGlobalTraceEventProvider 介面
IHttpApplicationProvider 介面
IMapHandlerProvider 介面
IMapPathProvider 介面
IPreBeginRequestProvider 介面
IReadEntityProvider 介面
ISendResponseProvider 介面