IIS請求處理流程
一、IIS管道模型
1.1 IIS 6.0

1.2 IIS 7.0
二、管道事件
三、ASP.NET MVC請求到響應的基本流程
一、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請求到響應的基本流程