尽管 IIS 7 Web 服务器核心中的集成请求处理管道使本机代码开发人员能够使用 C++ 编写 HTTP 模块,但可供本机代码和托管代码开发人员使用的事件通知并不完全相同。 将 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状态和控制查询时调用。 |
| OnGlobalStopListening | 当 IIS 停止接受新请求时调用。 |
| OnGlobalThreadCleanup | 当 IIS 将线程返回到线程池时调用。 |
| OnGlobalTraceEvent | 引发跟踪事件时调用。 |
比较请求通知
尽管本机代码和托管代码 HTTP 模块的请求通知方法在很多方面相似,但它们并不完全类似。 例如,确定性请求通知方法列表对于本机代码和托管代码模块几乎完全相同,但不确定请求通知方法的列表却大相径庭。
Native-Code确定性请求通知
下表列出了可供本机代码开发人员使用的确定性请求通知方法。
| 事件通知方法 | 事件后通知方法 |
|---|---|
| OnBeginRequest | OnPostBeginRequest |
| OnAuthenticateRequest | OnPostAuthenticateRequest |
| OnAuthorizeRequest | OnPostAuthorizeRequest |
| OnResolveRequestCache | OnPostResolveRequestCache |
| OnMapRequestHandler | OnPostMapRequestHandler |
| OnAcquireRequestState | OnPostAcquireRequestState |
| OnPreExecuteRequestHandler | OnPostPreExecuteRequestHandler |
| OnExecuteRequestHandler | OnPostExecuteRequestHandler |
| OnReleaseRequestState | OnPostReleaseRequestState |
| OnUpdateRequestCache | OnPostUpdateRequestCache |
| OnLogRequest | OnPostLogRequest |
| OnEndRequest | OnPostEndRequest |
Managed-Code确定性请求通知
下表列出了可供托管代码开发人员使用的确定性请求通知方法。
| 事件通知方法 | 事件后通知方法 |
|---|---|
| BeginRequest | (无) |
| AuthenticateRequest | PostAuthenticateRequest |
| AuthorizeRequest | PostAuthorizeRequest |
| ResolveRequestCache | PostResolveRequestCache |
| MapRequestHandler | PostMapRequestHandler |
| AcquireRequestState | PostAcquireRequestState |
| PreRequestHandlerExecute | (无) |
| RequestHandlerExecute | PostRequestHandlerExecute |
| ReleaseRequestState | PostReleaseRequestState |
| UpdateRequestCache | PostUpdateRequestCache |
| LogRequest | PostLogRequest |
| EndRequest | (无) |
Native-Code不确定的请求通知
下表列出了可供本机代码开发人员使用的不确定请求通知方法。
| 事件通知方法 | 事件后通知方法 |
|---|---|
| OnAsyncCompletion | (无) |
| OnCustomRequestNotification | (无) |
| OnMapPath | (无) |
| OnReadEntity | (无) |
| OnSendResponse | (无) |
Managed-Code不确定的请求通知
下表列出了可供托管代码开发人员使用的不确定请求通知方法。
| 事件通知方法 | 事件后通知方法 |
|---|---|
| PreSendRequestHeaders | (无) |
| PreSendRequestContent | (无) |