概述:
大多數.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頁面上輸出處理的步驟。
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx_2.png" target="_blank"></a>
2、在服務端模拟iis建立一個asp.net宿主環境:模拟為将建立的步驟寫在一個文本檔案中。
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx2_2.png" target="_blank"></a>
實作:
這個流程處理比較大,我分幾個步說明:
1、先看整個大流程,和我之前說的一樣分了兩個流程去處理,一個為flowchart,一個是順序工作流,如下圖:
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx3_2.png" target="_blank"></a>
2、看下建立Asp.net環境的flowchart,輕按兩下進去檢視,如下圖:
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx4_2.png" target="_blank"></a>
上圖可以很清楚地看出來,首先檢查請求頁面的字尾名,根據字尾名确定處理的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:
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx5_2.png" target="_blank"></a>
3.1 第一個HttpModule,如下圖:
3.2 HttpHandler
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx7_2.png" target="_blank"></a>
3.3 ASP.NET Page頁面生命周期:
<a href="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/WF4.0asp.net_1402F/aspx8_2.png" target="_blank"></a>
3.4 第二個HttpModule,如下圖:
總結:
asp.net請求處理就是一個流程,故我使用了wf去模拟這個流程,我将這個流程宿主在wcf中來模拟将asp.net應用程式宿主在iis中。
這篇文章其實能說很多很多,asp.net的每個處理步驟都有很多東西,我一時很難說清楚,是以畫了這麼一個流程來幫助自己了解,後來就寫了這篇文章,希望對您也有幫助。如果您對文章有意見和見解,請給我留言,謝謝。
本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/05/25/wfaspdotnetpagelifecycle.html,如需轉載請自行聯系原作者