Класс CHttpModule
Определяет базовый класс для http-модулей уровня запроса.
Синтаксис
class CHttpModule
Методы
В следующей таблице перечислены методы, предоставляемые классом CHttpModule
.
Имя | Описание |
---|---|
~CHttpModule | Отменяет выделение экземпляра CHttpModule класса . |
CHttpModule | Инициализирует новый экземпляр класса CHttpModule . |
Dispose | Освобождает все ресурсы, используемые текущим экземпляром класса CHttpModule . |
OnAcquireRequestState | Представляет метод, который будет обрабатывать AcquireRequestState событие, которое происходит, когда IIS извлекает состояние для текущего запроса. |
OnAsyncCompletion | Представляет метод, который будет обрабатывать событие асинхронного завершения, которое происходит после завершения обработки асинхронной операции. |
OnAuthenticateRequest | Представляет метод, который будет обрабатывать AuthenticateRequest событие, которое возникает, когда СЛУЖБЫ IIS устанавливают удостоверение пользователя. |
OnAuthorizeRequest | Представляет метод, который будет обрабатывать AuthorizeRequest событие, которое происходит, когда СЛУЖБЫ IIS проверяют авторизацию пользователя. |
OnBeginRequest | Представляет метод, который будет обрабатывать BeginRequest событие, которое возникает как первое событие в конвейере обработки запросов, интегрированном с HTTP, для текущего запроса. |
OnCustomRequestNotification | Представляет метод, который будет обрабатывать пользовательское событие, которое возникает, когда модуль создает определяемое пользователем уведомление. |
OnEndRequest | Представляет метод, который будет обрабатывать EndRequest событие, которое возникает как последнее событие в конвейере обработки запросов, интегрированном с HTTP, для текущего запроса. |
OnExecuteRequestHandler | Представляет метод, который будет обрабатывать ExecuteRequestHandler событие, которое происходит, когда IIS выполняет обработчик для текущего запроса. |
OnLogRequest | Представляет метод, который будет обрабатывать LogRequest событие, которое происходит при подготовке IIS к регистрации текущего запроса. |
OnMapPath | Представляет метод, который будет обрабатывать MapPath событие, которое происходит, когда операция запрашивает физический путь для сопоставления с текущим запросом. |
OnMapRequestHandler | Представляет метод, который будет обрабатывать MapRequestHandler событие, которое происходит, когда IIS сопоставляет текущий запрос с обработчиком событий. |
OnPostAcquireRequestState | Представляет метод, который будет обрабатывать AcquireRequestState событие после получения iis состояния текущего запроса. |
OnPostAuthenticateRequest | Представляет метод, который будет обрабатывать событие, выполняемое AuthenticateRequest после установки iis удостоверения пользователя. |
OnPostAuthorizeRequest | Представляет метод, который будет обрабатывать событие, выполняемое AuthorizeRequest после проверки авторизации пользователя iis. |
OnPostBeginRequest | Представляет метод, который будет обрабатывать BeginRequest событие после выполнения, которое происходит после первого события в конвейере обработки запросов, интегрированного с HTTP. |
OnPostEndRequest | Представляет метод, который будет обрабатывать событие, выполняемое EndRequest после последнего события в конвейере обработки запросов, интегрированного с HTTP, для текущего запроса. |
OnPostExecuteRequestHandler | Представляет метод, который будет обрабатывать ExecuteRequestHandler событие после выполнения iis обработчика текущего запроса. |
OnPostLogRequest | Представляет метод, который будет обрабатывать LogRequest событие после выполнения, которое происходит после того, как СЛУЖБЫ IIS зарегистрировали текущий запрос. |
OnPostMapRequestHandler | Представляет метод, который будет обрабатывать событие, выполняемое MapRequestHandler после того, как IIS сопоставит текущий запрос с соответствующим обработчиком событий. |
OnPostPreExecuteRequestHandler | Представляет метод, который будет обрабатывать событие, выполняемое PreExecuteRequestHandler после выполнения iis обработчика запросов. |
OnPostReleaseRequestState | Представляет метод, который будет обрабатывать ReleaseRequestState событие после освобождения текущего состояния. |
OnPostResolveRequestCache | Представляет метод, который будет обрабатывать ResolveRequestCache событие после выполнения, которое происходит после разрешения iis запроса из кэша. |
OnPostUpdateRequestCache | Представляет метод, который будет обрабатывать событие, выполняемое UpdateRequestCache после того, как СЛУЖБЫ IIS сохранили запрос в кэше. |
OnPreExecuteRequestHandler | Представляет метод, который будет обрабатывать PreExecuteRequestHandler событие, которое происходит до выполнения iis обработчика запросов. |
OnReadEntity | Представляет метод, который будет обрабатывать ReadEntity событие, которое происходит, когда операция считывает данные из буфера запросов. |
OnReleaseRequestState | Представляет метод, который будет обрабатывать ReleaseRequestState событие, которое возникает при освобождении текущего состояния. |
OnResolveRequestCache | Представляет метод, который будет обрабатывать ResolveRequestCache событие, которое возникает при разрешении iis запроса в кэше. |
OnSendResponse | Представляет метод, который будет обрабатывать SendResponse событие, которое происходит при отправке iis буфера ответов. |
OnUpdateRequestCache | Представляет метод, который будет обрабатывать UpdateRequestCache событие, которое происходит, когда IIS сохраняет запрос в кэше. |
Производные классы
Этот класс не содержит производных классов.
Комментарии
Класс CHttpModule
является базовым классом для http-модулей уровня запроса. Чтобы создать производный CHttpModule
от класса, необходимо создать HTTP-модуль уровня запроса, содержащий класс, наследующий от , и класс, производный от CHttpModule
интерфейса IHttpModuleFactory . Дополнительные сведения о создании модулей HTTP см. в разделе Проектирование Native-Code HTTP-модулей.
Класс CHttpModule
предоставляет защищенные методы конструктора и деструктора, а также открытый Dispose
метод. В конце запроса вызывается метод для Dispose
удаления экземпляра производного от CHttpModule
класса .
Класс CHttpModule
также определяет методы уведомлений, которые IIS 7 вызывает при обработке событий уровня запроса в интегрированном конвейере обработки запросов. Модуль HTTP может регистрироваться для определенных событий, определяя список уведомлений в экспортируемой функции RegisterModule модуля.
События детерминированного запроса
Большинство методов уведомления на уровне запроса обрабатываются в хронологическом порядке во время обычного потока событий уровня запроса в интегрированном конвейере. Каждый из детерминированных методов уведомления на уровне запроса имеет соответствующее уведомление после события, что позволяет модулям HTTP обрабатывать при возникновении события или сразу после него.
В следующей таблице перечислены хронологические методы уведомления на уровне запроса и уведомления после события в порядке их возникновения в интегрированном конвейере.
Метод уведомления о событиях | Метод уведомления о событиях после события |
---|---|
OnBeginRequest |
OnPostBeginRequest |
OnAuthenticateRequest |
OnPostAuthenticateRequest |
OnAuthorizeRequest |
OnPostAuthorizeRequest |
OnResolveRequestCache |
OnPostResolveRequestCache |
OnMapRequestHandler |
OnPostMapRequestHandler |
OnAcquireRequestState |
OnPostAcquireRequestState |
OnPreExecuteRequestHandler |
OnPostPreExecuteRequestHandler |
OnExecuteRequestHandler |
OnPostExecuteRequestHandler |
OnReleaseRequestState |
OnPostReleaseRequestState |
OnUpdateRequestCache |
OnPostUpdateRequestCache |
OnLogRequest |
OnPostLogRequest |
OnEndRequest |
OnPostEndRequest |
Например, OnBeginRequest
происходит до OnAuthenticateRequest
, OnMapRequestHandler
происходит до OnAcquireRequestState
и т. д.
Примечание
Уведомления о последующих событиях происходят до следующего уведомления на уровне запроса в хронологическом порядке. Например, OnPostAuthenticateRequest
происходит до OnAuthorizeRequest
, OnPostUpdateRequestCache
происходит до OnLogRequest
и т. д.
События недетерминированного запроса
Остальные методы уведомления на уровне запроса не обрабатываются в определенном порядке; вместо этого IIS обрабатывает эти события при возникновении определенного недетерминированного события. В следующей таблице перечислены недетерминированные события уровня запроса и все связанные методы уведомления после события.
Метод уведомления о событиях | Метод уведомления о событиях после события |
---|---|
OnAsyncCompletion |
(Нет) 1 |
OnCustomRequestNotification |
(Нет) 2 |
OnMapPath |
(нет) |
OnReadEntity |
(нет) |
OnSendResponse |
(нет) |
1 Метод OnAsyncCompletion
вызывается при возникновении асинхронного события в модуле HTTP. Таким образом, вы не можете зарегистрировать асинхронное уведомление с помощью экспортируемой функции RegisterModule модуля. Вместо этого модуль будет предоставлять OnAsyncCompletion
метод для обработки уведомлений, которые возникают после вызова методов, возвращающих асинхронно (например, методы IHttpContext::ExecuteRequest и IHttpResponse::WriteEntityChunks ). При вызове OnAsyncCompletion
служб IIS метод передает параметры, которые указывают тип уведомления и указывает, было ли уведомление для события или после события.
2 Метод OnCustomRequestNotification
не имеет соответствующего метода уведомления после события. Модуль HTTP может зарегистрировать пользовательское уведомление с помощью экспортируемой RegisterModule
функции модуля, но модуль не может зарегистрировать уведомление, которое происходит после создания пользовательского уведомления.
Пример
В следующем примере показано, как создать простой модуль HTTP "Hello World". Модуль определяет экспортированную RegisterModule
функцию, которая передает экземпляр IHttpModuleFactory
интерфейса методу IHttpModuleRegistrationInfo::SetRequestNotifications и регистрирует для уведомления RQ_BEGIN_REQUEST . IIS использует метод IHttpModuleFactory::GetHttpModule для создания экземпляра класса и возвращает состояние успешного CHttpModule
выполнения. IIS также использует метод IHttpModuleFactory::Terminate для удаления фабрики из памяти.
При появлении RQ_BEGIN_REQUEST
уведомления СЛУЖБЫ IIS вызывает метод модуля OnBeginRequest
для обработки текущего запроса. OnBeginRequest
очищает буфер ответа и изменяет тип MIME для ответа. Затем метод создает блок данных, содержащий строку "Hello World", и возвращает строку веб-клиенту. Наконец, модуль возвращает индикатор состояния, который уведомляет IIS о завершении всех уведомлений, а затем завершает работу.
#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
);
}
Модуль должен экспортировать функцию RegisterModule
. Эту функцию можно экспортировать, создав файл определения модуля (DEF- файл) для проекта, или скомпилировать модуль с помощью /EXPORT:RegisterModule
параметра . Дополнительные сведения см. в разделе Пошаговое руководство. Создание модуля HTTP Request-Level с помощью машинного кода.
При необходимости можно скомпилировать код с помощью __stdcall (/Gz)
соглашения о вызовах вместо явного объявления соглашения о вызовах для каждой функции.
Требования
Тип | Описание |
---|---|
клиент | — IIS 7.0 в Windows Vista — IIS 7.5 в Windows 7 — IIS 8.0 в Windows 8 — IIS 10.0 в Windows 10 |
Сервер | — IIS 7.0 в Windows Server 2008 — IIS 7.5 в Windows Server 2008 R2 — IIS 8.0 в Windows Server 2012 — IIS 8.5 в Windows Server 2012 R2 — IIS 10.0 в Windows Server 2016 |
Продукт | — 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 |
См. также:
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по