一、IIS管道模型
1.1 IIS 6.0
- 在IIS 6.0和早期版本中,ASP.NET被实现为IIS的ISAPI扩展。
- 对于ASP.NET内容类型的请求,会被转发到承载ASP.NET请求管道和页面框架的ASP.NET的 isapi.dll
- 对非ASP.NET内容(例如ASP页或静态文件)的请求则由IIS或其他ISAPI扩展进行处理,并且对ASP.NET不可见
1.2 IIS 7.0
- IIS 7.0 将ASP.NET管道与自身管道集成在一起,通过模块化的方式进行组合和拓展
二、管道事件
- 在集成模式下,暴露给模块的ASP.NET请求处理阶段直接连接到IIS管道的相应阶段。完整的管道包含以下阶段,这些阶段在ASP.NET中作为HttpApplication事件公开:
事件 | 描述 |
---|---|
1.BeginRequest | 请求处理开始 |
2.AuthenticateRequest | 该请求已通过身份验证。IIS和ASP.NET身份验证模块订阅此阶段以执行身份验证 |
3.PostAuthenticateRequest | |
4.AuthorizeRequest | 该请求被授权。IIS和ASP.NET授权模块检查经过身份验证的用户是否有权访问所请求的资源 |
5.PostAuthorizeRequest | |
6.ResolveRequestCache | 高速缓存模块检查对此请求的响应是否存在于高速缓存中,然后将其返回,而不是继续执行其余的执行路径。ASP.NET输出缓存和IIS输出缓存功能均执行 |
7.PostResolveRequestCache | |
8.MapRequestHandler | 此阶段在ASP.NET中是内部的,用于确定请求处理程序 |
9.PostMapRequestHandler | |
10.AcquireRequestState | 检索执行请求所需的状态。ASP.NET会话状态和配置文件模块获取其数据 |
11.PostAcquireRequestState | |
12.PreExecuteRequestHandler | 执行处理程序之前的所有任务 |
13.ExecuteRequestHandler | 请求处理程序执行。提供ASPX页,ASP页,CGI程序和静态文件 |
14.PostExecuteRequestHandler | |
15.ReleaseRequestState | 请求状态更改已保存,并在此处清除状态。ASP.NET会话状态和配置文件模块使用此阶段进行清理 |
16.PostReleaseRequestState | |
17.UpdateRequestCache | 响应存储在缓存中以备将来使用。执行ASP.NET输出缓存和IIS输出缓存模块以将响应保存到其缓存中 |
18.PostUpdateRequestCache | |
19.LogRequest | 此阶段记录请求的结果,并确保即使发生错误也可以执行 |
20.PostLogRequest | |
21.EndRequest | 此阶段执行所有最终请求清除,并确保即使发生错误也可以执行 |