ASP.NET中Web應用程序
HTTP 協議之所以能夠獲得如此大的成功,其設計實現的簡潔性和無狀態連接的高效率是很重要的原因。而為了在無狀態的 HTTP 請求和有狀態的客戶端操作之間達到平衡,產生了服務器端會話 (Session) 的概念。客戶端在連接到服務器后,就由 Web 服務器產生并維護一個客戶端的會話;當客戶端通過無狀態 HTTP 協議再次連接到服務器時,服務器根據客戶端提交的某種憑據,如 Cookie 或 URL 參數,將客戶關聯到某個會話上。這種思路在各種開發語言和開發環境中大量得到應用。
在 ASP.NET 中,Web應用程序和會話狀態被分別進行維護,通過 HttpApplication 和 HttpSessionState 分離 Web應用程序與會話的功能。應用程序層邏輯在 Global.asax 文件中實現,運行時編譯成 System.Web.HttpApplication 的實例;會話則作為單獨的 System.Web.SessionState.HttpSessionState 實例,由服務器統一為每個用戶會話維護,通過 ASP.NET 頁面編譯成的 System.Web.UI.Page 對象子類的 Session 屬性訪問。關于 ASP.NET 中不同層次關系可參考我以前的一篇文章《.NET 1.1中預編譯ASP.NET頁面實現原理淺析 自動預編譯機制淺析》。
ASP.NET 在處理客戶端請求時,首先將根據客戶端環境,生成一個 System.Web.HttpContext 對象,并將此對象作為執行上下文傳遞給后面的頁面執行代碼。
我們可以看到,HttpRuntime 在處理頁面請求之前,根據 HttpWorkerRequest 中給出的環境,構造 HttpContext 對象,并以次對象作為參數從應用程序池中獲取可用應用程序。簡要代碼如下:
以下內容為程序代碼:
- private void HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)
- {
- // 構造 HTTP 調用上下文對象
- HttpContext ctxt = new HttpContext(wr, 0);
- //...
- // 獲取當前 Web 應用程序實例
- IHttpHandler handler = HttpApplicationFactory.GetApplicationInstance(ctxt);
- // 調用 handler 實際處理頁面請求
- }
以上介紹ASP.NET中Web應用程序
【編輯推薦】