戲說ASP.NET的解釋原理
asp時(shí)代已經(jīng)過去,web2.0的時(shí)代已經(jīng)來臨。asp.net2.0經(jīng)過MS高度封裝,在vs.net下的開發(fā)已經(jīng)完全是傻瓜式的了,但我不愿只做個(gè)coding man。
在以往的asp時(shí)代,當(dāng)請(qǐng)求一個(gè)*.asp文件的時(shí)候,這個(gè)請(qǐng)求首先被一個(gè)名為inetinfo.exe進(jìn)程截獲,打開任務(wù)管理器,發(fā)現(xiàn)inetinfo.exe其實(shí)就是www服務(wù)。Inetinfo.exe截獲之后,馬上把控制權(quán)交給一個(gè)名為asp.dll進(jìn)程,asp.ddl就會(huì)解釋和執(zhí)行這個(gè)asp頁(yè)面,之后把數(shù)據(jù)流返回給client瀏覽器,如果你是XP系統(tǒng),就能在C:"WINDOWS"system32"inetsrv目錄在找到該文件,此時(shí)的asp要通過解釋執(zhí)行,每請(qǐng)求一次,都要從頭解釋,人世間最痛苦的事,莫過如此。
既然有更新的技術(shù),當(dāng)然要使用新技術(shù)了,老使用舊技術(shù)也不能說明你用情專一。
在asp.net2.0時(shí)代,當(dāng)client向IIS請(qǐng)求 *.aspx文件時(shí),請(qǐng)求也同上面一樣被inetinfo.exe進(jìn)程截獲,inetinfo.exe判斷文件的后綴之后,將這個(gè)請(qǐng)求轉(zhuǎn)交給aspnet_isapi.dll,(你可以在C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727目錄下找到該文件),而aspnet_isapi.dll則會(huì)通過一個(gè)名為HttpPipeLine的管道,將這個(gè)請(qǐng)求發(fā)送給aspnet_wp.exe進(jìn)程,(你可以在C:"WINDOWS"Microsoft.NET"Framework"v2.0.50727目錄下找到該文件,同時(shí)在任務(wù)管理器中也可以找到),一旦http請(qǐng)求進(jìn)入aspnet_wp.exe進(jìn)程后,asp.net framework就會(huì)通過httpRuntime來處理這個(gè)請(qǐng)求,然后把數(shù)據(jù)流發(fā)送回client端的瀏覽器。
只喜歡和美女聊天的男人,決不是好男人。我們可以把HttpRuntime看成一位美女。既然她是美女,那當(dāng)然要研究研究了。HttpRuntime到底是什么呢?她不是一個(gè)實(shí)體,而是執(zhí)行asp.net的一個(gè)抽象的大環(huán)境,記住這點(diǎn)很重要。我們來具體看看HttpRuntime到底是怎樣執(zhí)行的?當(dāng)http請(qǐng)求進(jìn)入httpRuntime之后,這個(gè)請(qǐng)求會(huì)被繼續(xù)被送入到一個(gè)名為HttpApplication Factory的工廠中,工廠為這個(gè)http請(qǐng)求生成一個(gè)HttpApplication的實(shí)例,隨后這個(gè)實(shí)例被送到HttpModule容器中,隨后http請(qǐng)求繼續(xù)送到HttpHandler Factory工廠,
這個(gè)工廠也會(huì)生成一個(gè)HttpHandler的實(shí)例,這個(gè)實(shí)例的processRequire方法處理傳進(jìn)來的請(qǐng)求,然后把處理好的結(jié)果和控制權(quán)交給HttpModule容器,HttpModule容器再把從HttpHandler實(shí)例處理好的數(shù)據(jù)流回發(fā)到clinet端的瀏覽器,這樣一個(gè)Http請(qǐng)求的完美生命周期就結(jié)束了。
記住,真正處理Http請(qǐng)求的地方在HttpHandler實(shí)例的processRequire方法中,而到最后回發(fā)數(shù)據(jù)流到client端的地方是HttpModule容器中。
【編輯推薦】