天天看點

WF4.0實戰(十八):模拟asp.net生命周期

概述:  

    大多數.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,如需轉載請自行聯系原作者

繼續閱讀