一、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 | 此阶段执行所有最终请求清除,并确保即使发生错误也可以执行 |
三、ASP.NET MVC请求到响应的基本流程

本文详细介绍了IIS从6.0到7.0的管道模型变化,其中IIS7.0实现了与ASP.NET管道的集成。讨论了ASP.NET MVC请求到响应的基本流程,包括多个关键事件阶段,如身份验证、授权、缓存管理和请求处理。此外,还涵盖了IIS和ASP.NET如何处理不同类型的内容请求。
1358

被折叠的 条评论
为什么被折叠?



