IIS與ASP.NET對請求的處理
IIS接收請求到進入CLR
當用戶向服務器發送的請求時,以驅動形式運行的HTTP.SYS接收到該請求,將其分發給W3SVC:IIS6中,W3SVC會去解析出UR,並根據從Metabase獲取的URL與Web之間的映射關系得到目標應用,進而得到目標應用運行的應用程序池或工作進程;IIS7中,W3SVC接收到的HTTP請求最終都會被傳遞到WAS,如針對單個應用程序池的工作進程未創建,WAS會創建工作進程,WAS在進行請求處理過程中通過內置的配置管理模塊加載以XML形式存放在applicationHost.config的配置信息。
在工作進程初始化過程中,相應的ISAPI動態鏈接庫被加載,被加載的IsapiRuntime會接管該HTTP請求,首先創建一個IsapiWorkerRequest對象來封裝當前的HTTP請求,隨後將此對象傳遞給ASP.NET運行時HttpRuntime。
從此時起,HTTP請求正式進入了APS.NET管道。
HttpRuntime會根據IsapiWorkerRequest對象創建用於表示當前HTTP請求的上下文對象HttpContext。
隨著HttpContext的創建,HttpRuntime會利用HttpApplicationFactory創建新的或從APS.NET維護的HttpApplication對象池中獲取現有的HttpApplication對象。HttpApplication負責處理當前的HTTP請求。
在HttpApplication初始化過程中,ASP.NET會根據配置文件加載並初始化註冊的HttpModule對象。對於HttpApplication來說,在它處理HTTP請求的不同階段會觸發不同的事件(Event),而HttpModule的意義在於通過註冊HttpApplication的相應事件,將所需的操作註入整個HTTP請求的處理流程。
最終完成對HTTP請求的處理實現在HttpHandler中,不同的資源類型對應著不同類型的HttpHandler。
IIS與ASP.NET對請求的處理