天天看點

ASP.NET的運作原理與運作機制

當一個HTTP請求到伺服器并被IIS接收到之後,IIS首先通過用戶端請求的頁面類型為其加載相應的.dll檔案,然後在處理過程中将這條請求發送給能夠處理這個請求的子產品。在ASP.NET 3.5中,這個子產品叫做HttpHandler(HTTP處理程式元件),之是以.aspx檔案可以被伺服器處理,就是因為在伺服器端有預設的 HttpHandler專門處理.aspx檔案。IIS在将這條請求發送給能夠處理這個請求的子產品之前,還需要經過一些HttpModule的處理,這些都是系統預設的Modules(用于擷取目前應用程式的子產品集合),在這個HTTP請求傳到HttpHandler之前要經過不同的HttpModule 的處理。這樣做的好處,一是為了一些必需的過程,二是為了安全性,三是為了提高效率,四是為了使用者能夠在更多的環節上進行控制,增強使用者的控制能力。 ASP.NET 3.5運作原理如圖1.1所示。

ASP.NET的運作原理與運作機制
圖1.1  ASP.NET 3.5運作原理

說明:HttpModule子產品是一個元件,可以注冊為ASP.NET 3.5請求生命周期的一部分,當處理該元件時,該元件可以讀取或更改請求或響應。HttpModule子產品通常用于執行需要監視每個請求的特殊任務,如安全或站點統計資訊。

ASP.NET 3.5運作機制如圖1.2所示。

通常情況下,ASP.NET架構搭建在Windows Server(伺服器版作業系統)+IIS(Web伺服器,是Internet資訊服務管理器的英文縮寫)環境中,在安裝.NET Framework時,安裝程式将會在IIS中注冊ASP.NET所需的ISAPI擴充(aspnet_isapi.dll),這就使得作為 ASP.NET宿主的IIS在接收到用戶端的HTTP請求後,将響應請求的控制權交給ASP.NET運作。

ASP.NET運作時接收到請求後,會判斷站點是否為第一次被通路,如果是第一次通路,則運作初始化工作(如加載Bin目錄中的DLL動态連結庫,讀取Web.Config網站配置檔案,初始化HttpApplication執行個體,編譯和加載Global.asax檔案等)。ASP.NET運作時還負責建立請求響應線程的HttpContext上下文執行個體和建立承載響應結果的HttpTextWriter執行個體。然後,ASP.NET運作時尋找合适的 HttpHandler(通常就是具有的ASP.NET頁面)處理HTTP請求,并等HttpHandler傳回請求處理結果。最後,ASP.NET運作時在完成一些後續工作之後,如儲存Session、異常處理,再通過IIS把響應結構傳回給用戶端。

ASP.NET的運作原理與運作機制
圖1.2  ASP.NET 3.5運作機制

注意:ASP.NET ISAPI工作的主要任務就是安排ASPNET_WP.exe處理請求,并監視ASPNET_ WP.exe程序的執行情況,如果ASPNET_WP.exe程序不能完成任務,ASP.NET ISAPI就安排一個新的ASPNET_WP.exe來處理工作。ASPNET_WP.exe的主要任務是将請求交給一系列稱為HTTP管道的托管對象。如果把ASP.NET ISAPI比做銷售商,那麼ASPNET_WP.exe就是生産商,而HTTP管道就是生産的流水線,負責流水線的小組就是HttpRuntime。生産商ASPNET_WP.exe會将訂單(HTTP請求)交給HttpRuntime小組的從業人員 ProcessRequest(HttpWorkerRequest wr),HttpRuntime根據内部的分工,最終由ProcessRequestInternal(HttpWorkerRequest wr)在流水線上進行生産。

繼續閱讀