概述:
大多數.net程序員都熟悉:浏覽器向iis服務器發送一個請求,會發生一些什麼事情。今天,我將使用WF+WCF模擬一下整個處理過程。當 然這裡只是模擬,與實際還是有差距的,如果敘述的有問題,請指出。主要是為了說明:用流程的視覺去看待asp.net請求處理過程,你會 發現它其實不難。好了,還是照舊,先看效果,在說如何實現,最後總結,附代碼下載。
對於一個來自客戶端的請求,我將iis的處理總結為兩個流程
1、創建Asp.net環境(如果是第一次請求)
2、使用MHPM處理請求(M:HttpModule、H:HttpHandler、P:Asp.net Page、M:HttpModule)
模擬的原型是:一個aspx頁面上有一個button,點擊這個button去請求iis服務
模擬的實際是:一個wpf窗體上有一個button,點擊這個button去調用一個服務端的WCF服務,這個服務裡面包含了模擬asp.net生命周期 的wf流程,這個wcf服務返回MHPM處理請求的步驟。
1、在服務端創建一個文本文件,來模擬iis創建asp.net環境。
2、使用一個順序工作流來模擬MHPM事件處理請求,並將處理步驟返回給客戶端。本來想返回一段html腳本的,打算以後完善吧。
效果:
1、模擬的處理結果:在wpf頁面上輸出處理的步驟。
2、在服務端模擬iis創建一個asp.net宿主環境:模擬為將創建的步驟寫在一個文本文件中。
實現:
這個流程處理比較大,我分幾個步說明:
1、先看整個大流程,和我之前說的一樣分了兩個流程去處理,一個為 flowchart,一個是順序工作流,如下圖:
2、看下創建Asp.net環境的flowchart,雙擊進去查看, 如下圖:
上圖可以很清楚地看出來,首先檢查請求頁面的後綴名,根據後綴名確定處理的dll,看是否能處理這個請求,例如如果是aspx,將請求 傳遞 ‘aspnet_isapi.dll’處理。接著判斷是否是第一次請求,如果是第一次請求,使用ApplicationManager類創建運行站點 的應用程序域。這個應用程序域用來區別同一個iis上的不同asp.net應用程序的環境。這個應用程序域會創建HttpRuntime對象等來構建宿 主環境。這個宿主環境緊接著會創建‘HttpContext’ , ‘HttpRequest’ 和‘HttpResponse’等對象。 如果是第一次請求還要創建一個HttpApplication,並將HttpApplication分配給 ‘HttpContext’ 等對象。如果不是第一次, 可以從處理池中取HttpApplication。最後將這個請求交給HttpApplication處理。詳見msdn。
3、使用MHPM處理請求,這個流程也很長,分四步查看,整個流程如下圖,兩個HttpModule、一個HttpHandler、和一個Asp.net Page:
3.1 第一個HttpModule,如下圖:
3.2 HttpHandler
3.3 ASP.NET Page頁面生命周期:
3.4 第二個HttpModule,如下圖:
總結:
asp.net請求處理就是一個流程,故我使用了wf去模擬這個流程,我將這個流程宿主在wcf中來模擬將asp.net應用程序宿主在iis中。
這篇文章其實能說很多很多,asp.net的每個處理步驟都有很多東西,我一時很難說清楚,所以畫了這麼一個流程來幫助自己理解,後來 就寫了這篇文章,希望對您也有幫助。如果您對文章有意見和見解,請給我留言,謝謝。
出處:http://zhuqil.cnblogs.com
代碼:http://files.cnblogs.com/zhuqil/wfaspdotnetpagelifecycle.rar