Сравнение уведомлений Native-Code и Managed-Code

Хотя интегрированный конвейер обработки запросов в ядре веб-сервера IIS 7 позволяет разработчикам машинного кода писать http-модули в C++, уведомления о событиях, доступные разработчикам машинного кода и управляемого кода, не идентичны. Разработчикам, которые переносят модуль HTTP с управляемого языка, например C# в машинный код, придется устранить эти различия при создании новых модулей.

Глобальные уведомления

С помощью IIS 7 разработчики теперь могут создавать модули HTTP машинного кода, обрабатывающие уведомления на глобальном уровне. В предыдущих версиях IIS разработчики могут создавать модули HTTP, обрабатывающие уведомления только на уровне запроса. Модули HTTP, обрабатывающие уведомления на глобальном уровне, используются для обработки уведомлений для различных событий уровня сервера.

В следующей таблице перечислены глобальные методы уведомлений, доступные разработчикам машинного кода.

Метод уведомления о событиях Описание
OnGlobalApplicationResolveModules Вызывается, когда IIS определяет зарегистрированные модули.
OnGlobalApplicationStart Вызывается при запуске приложения IIS.
OnGlobalApplicationStop Вызывается при выходе iis из приложения.
OnGlobalCacheCleanup Вызывается, когда IIS очищает кэш.
OnGlobalCacheOperation Вызывается, когда IIS выполняет операцию, связанную с кэшем.
OnGlobalConfigurationChange Вызывается при изменении файла конфигурации.
OnGlobalCustomNotification Вызывается, когда модуль вызывает определяемое пользователем уведомление.
OnGlobalFileChange Вызывается при изменении файла на веб-сайте.
OnGlobalHealthCheck Вызывается при выполнении операции, связанной со здоровьем.
OnGlobalPreBeginRequest Вызывается перед тем, как запрос входит в интегрированную конвейерную систему обработки запросов.
OnGlobalRSCAQuery Вызывается при выполнении запроса Run-Time Status and Control.
OnGlobalStopListening Вызывается, когда IIS прекращает прием новых запросов.
OnGlobalThreadCleanup Вызывается, когда IIS возвращает поток в пул потоков.
OnGlobalTraceEvent Вызывается при вызове события трассировки.

Сравнение уведомлений запросов

Хотя методы уведомлений запроса для модулей HTTP в машинном коде и управляемом коде похожи во многих отношениях, они не полностью аналогичны. Например, список детерминированных методов уведомлений запроса почти идентичен для модулей машинного кода и управляемого кода, но список недетерминированных методов уведомлений запроса значительно отличается.

Нативный код: детерминированные уведомления о запросах

В следующей таблице перечислены детерминированные методы уведомлений запросов, доступные разработчикам машинного кода.

Метод уведомления о событиях Метод уведомления после события
OnBeginRequest OnPostBeginRequest
OnAuthenticateRequest OnPostAuthenticateRequest
OnAuthorizeRequest OnPostAuthorizeRequest
OnResolveRequestCache OnPostResolveRequestCache
OnMapRequestHandler OnPostMapRequestHandler
OnAcquireRequestState OnPostAcquireRequestState
OnPreExecuteRequestHandler OnPostPreExecuteRequestHandler
OnExecuteRequestHandler OnPostExecuteRequestHandler
OnReleaseRequestState OnPostReleaseRequestState
OnUpdateRequestCache OnPostUpdateRequestCache
OnLogRequest OnPostLogRequest
OnEndRequest ПослеЗавершенияЗапроса

Детерминированные уведомления о запросах на управляемом коде

В следующей таблице перечислены детерминированные методы уведомлений запросов, доступные разработчикам управляемого кода.

Метод уведомления о событиях Метод уведомления после события
НачатьЗапрос (Нет)
Запрос на аутентификацию PostAuthenticateRequest
ЗапросАвторизации ЗапросНаПостАвторизацию
РазрешитьКэшЗапросов PostResolveRequestCache
MapRequestHandler PostMapRequestHandler
AcquireRequestState PostAcquireRequestState
PreRequestHandlerExecute (Нет)
RequestHandlerExecute PostRequestHandlerExecute
ReleaseRequestState PostReleaseRequestState
UpdateRequestCache ПостобновлениеКэшаЗапроса
LogRequest PostLogRequest
ЗавершитьЗапрос (Нет)

Native-Code недетерминированные уведомления о запросах

В следующей таблице перечислены недетерминированные методы уведомлений запросов, доступные разработчикам машинного кода.

Метод уведомления о событиях Метод уведомления после события
OnAsyncCompletion (Нет)
OnCustomRequestNotification (Нет)
OnMapPath (Нет)
OnReadEntity (Нет)
OnSendResponse (Нет)

Managed-Code недетерминированные уведомления о запросах

В следующей таблице перечислены недетерминированные методы уведомлений запросов, доступные разработчикам управляемого кода.

Метод уведомления о событиях Метод уведомления после события
PreSendRequestHeaders (Нет)
PreSendRequestContent (Нет)

См. также

Создание модулей HTTP Native-Code
Проектирование модулей HTTP Native-Code