ASP.NET頁面執行機制以及請求處理流程

iDotNetSpace發表於2009-07-17

IIS處理頁面的執行機制:

IIS自身是不能處理像ASPX副檔名這樣的頁面,只能直接請求像HTML這樣的靜態檔案,之所以能處理ASPX這樣副檔名的頁面,是因為IIS有一個ISAPI過濾器,它是一個COM元件。ASP.NET服務在註冊到IIS的時候,就會新增一個Win32的擴充套件動態庫aspnet_isapi.dll。並將擴充套件可以處理的頁面副檔名(如ASPX)註冊到IIS裡面。擴充套件啟動後,就根據定義好的方式來處理IIS所不能處理的頁面。

當客戶端請求一個伺服器資源時,這個HTTP請求會被inetinfo.exe程式截獲(www服務),然後Check請求資源的型別,並依據資源對映資訊(儲存在IIS元庫中,一種IIS專用的配置資料庫)將請求的資源分配給特定的處理程式模組。若請求的是靜態資源(img,text,html等)則由IIS處理(IIS在本地Web Server上訪問請求的檔案),將內容輸出到控制檯,發出請求的瀏覽器就能接收到它了。若需要在伺服器端處理的請求,則會被傳到已註冊的擴充套件模組中,aspx請求會被分配給aspnet_isapi.dll,讓這個程式開始處理程式碼,生成標準的HTML程式碼,然後將這些HTML加入到原有的HTML中,最後把完整的HTML返回給IIS,IIS再把內容傳送到客戶瀏覽器。

ASP.NET FrameWork對請求的處理:

上面說到IIS將像ASPX這樣的頁面分配給aspnet_isapi.dll,接著處理如下:

1、aspnet_isapi.dll則會通過一個Http PipeLine的管道將這個Http請求發給w3wp.exe(iis 工作者程式,IIS6.0中叫做 w3wq.exe,IIS5.0中叫做 aspnet_wp.exe),之後asp.net framework就會通過HttpRuntime來處理這個Http請求。

2、HttpRuntime首先會確定處理該請求的類名,HttpRuntime通過公共介面IHttpHandler來呼叫該類獲取被請求資源的類的例項。

3、呼叫HttpRuntime.ProcessRequest開始處理要傳送到瀏覽器的頁面,具體說就是建立一個HttpContext例項,它封裝了所有與請求有關的http特有的資訊,並初始化一個Write物件用於快取標記程式碼。

4、HttpRuntime使用上下文資訊查詢或新建能處理該請求的WEB應用程式的物件。由HttpApplication Factory負責返回HttpApplication例項。

5、HttpApplication例項會讀取web.config中所有HttpModule的配置。

5、HttpApplication物件使用IHttpHandlerFactory型別的例項返回HttpHandler(http處理程式)給HttpRuntime物件。一個頁面只是個http處理程式物件。

6、最後由HttpRuntime物件呼叫IHttpHandler的頁面物件的ProcessRequest方法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-609510/,如需轉載,請註明出處,否則將追究法律責任。

相關文章