標籤:bsp roc nbsp sax ext 組件 處理 process step
Asp.net底層就是使用者通過輸入網址,然後請求IIs伺服器的流程,在這個過程中有一個重要的組件就是ISAPI,這是一個底層的win32API,在擴充方面比較困難,多用於介面之間的橋接,.net和IIS通過IISAPI進行互動的,IIS中尾碼名.aspx,通過應用程式擴充映射到.net的ISAPI擴充的dll,這個dll就是aspnet_isapi.dll,訪問都是通過這個dll中相應的映射完成的。
1.通過asp.net的映射機制使用尾碼名從ISAPI中擷取到接收的請求,並將請求的路由到相應的handler,aspnet_isapi.dll會開啟一個背景工作處理序w3wp.exe(使用程式池進行建立,右側使用無則建立)
2.ISAPIRuntime.ProcessRequest(ecb),將控制代碼封裝為HttpWorkingRequest
3.HttpRuntime.ProcessRequest(wr)這個操作的作用:1.建立一個HttpContext執行個體,裡面封裝了瀏覽器報文的資訊2.建立一個HttpApplication執行個體,首先查看是否有空餘的application,沒有則按照global.asax類型建立,這個是用來處理報文資料.3.調用Init()方法,初始化管道事件,同時觸發管道執行事件。
HttpContext這個對象在整個請求的生命週期中都是存在的,封裝了報文的資訊,同時包含了所有的請求過程中的重要對象,包括Ruquest、Responese、Application、Cache、Server ,HttpContext.Current可以去訪問這些對象,HttpContext,Items這個集合中可以儲存一些資料資訊,這些資料的生命週期就是整個的請求過程,BeginRequest-EndRequest,HttpContext是在開始請求的時候被建立,是進程內唯一對象。
HttpApplication是Web程式處理的地方,他被映射到Global.asax類中,這個類繼承了HttpApplication,在Global中的每一個事件都是以Application_為首碼的事件實現,這也就避免了自己手動建立這些事件委託。每個asp.net的虛擬目錄都是在自己的應用程式定義域中執行,每個應用程式定義域可以有多個來自管理池的HttpApplication對象,這就是可以同時執行多個請求而互相不影響的原因。
Web.Config具有全域通知的作用,會重新建立應用程式定義域,關閉舊的應用程式定義域名。HttpApplication.Init()->HttpApplication.ResumeSteps,執行所有的處理器,這些處理器被映射到global.asax
Asp.net底層機制