IHttpEventProvider 介面
提供泛型附隨報告介面。
Syntax
class IHttpEventProvider
方法
下表列出 類別所 IHttpEventProvider
公開的方法。
名稱 | 描述 |
---|---|
SetErrorStatus | 指定要傳回的錯誤。 |
衍生類別
下表列出 介面所公開的 IHttpEventProvider
衍生類別。
名稱 | 描述 |
---|---|
IAuthenticationProvider | 提供 RQ_REQUEST_AUTHENTICATE 事件通知的介面。 |
ICacheProvider | 提供 GL_CACHE_OPERATION 事件通知的介面。 |
ICustomNotificationProvider | 提供 GL_CUSTOM_NOTIFCATION 和 RQ_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 介面