Asp.Net生命周期系列二
在上回書(shū)開(kāi)始的時(shí)候我們提到博客園的IIS看了一眼我的請(qǐng)求后就直接交給ASP.NET去處理了,并且要求ASP.NET處理完之后返回HTML以供展示。
那么我們不僅要問(wèn):
1,??? IIS肯定是沒(méi)有眼睛的啦,那它是怎么“看”的呢?
2,??? 在“看”到了.aspx的頁(yè)面請(qǐng)求后又是如何把它交給ASP.NET的呢?如果不做任何處理那它的存在又有什么意義呢?
3,??? ASP.NET收到這個(gè)處理請(qǐng)求后又是如何做的呢?它是怎么創(chuàng)建Context對(duì)象又是如何“雇傭”項(xiàng)目經(jīng)理HttpApplication對(duì)象的呢?
本文將就這些問(wèn)題進(jìn)行深入而簡(jiǎn)單的探討。
IIS通過(guò)請(qǐng)求的后綴去看,IIS中的isapi就是它的眼睛和路由,我們可以通過(guò)訪問(wèn)IIS的站點(diǎn)的屬性—》主目錄—》配置 來(lái)查看它的路由映射
我 們可以發(fā)現(xiàn),當(dāng)請(qǐng)求的Extension是.aspx時(shí),對(duì)應(yīng)的Executable path是C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 。就是當(dāng)IIS查找對(duì)應(yīng)的請(qǐng)求映射表時(shí),發(fā)現(xiàn)后綴是.aspx則直接交給aspnet.isapi.dll文件處理。
然而,在“看”的方法方式上,IIS5和IIS6有一些不同。
IIS5 通過(guò)inetinfo.exe進(jìn)程在TCP端口(默認(rèn)是80)來(lái)“看”那些進(jìn)來(lái)的Request。正如我們剛才看到的,如果這些Request是需要 aspnet_isapi.dll來(lái)處理,則aspnet_isapi.dll創(chuàng)建(不太確定worker process是不是aspnet_isapi.dll創(chuàng)建的,但是它們通過(guò)命名管道來(lái)交互)并持續(xù)監(jiān)視一個(gè)aspnet_wp.exe進(jìn)程,它就是 asp.net最重要的組件:worker process。幾乎所有的工作都是在這個(gè)進(jìn)程中完成,它在IIS6中被改名叫做w3wp.exe。
IIS6 則通過(guò)內(nèi)核模式中的HTTP.SYS來(lái)“看”那些進(jìn)來(lái)的Request。HTTP.SYS把進(jìn)來(lái)的Request發(fā)送到相應(yīng)的Application Pool(應(yīng)用程序池)。應(yīng)用程序池再把Request傳遞給aspnet_isapi來(lái)進(jìn)行創(chuàng)建worker process的工作。IIS6中的worker process已經(jīng)是w3wp.exe了。
其實(shí)aspnet_isapi在創(chuàng)建了 work process進(jìn)程和加載了CLR完成了托管環(huán)境的布局以后就什么也不管了,剩下的就交給了work process進(jìn)程去管理了,而wp進(jìn)程則把所有的任務(wù)都轉(zhuǎn)交給了HttpRuntime去處理,HttpRuntime完成了以后的所有工作,包括雇傭 項(xiàng)目經(jīng)理(Httpapplication),HttpRunTime根據(jù)webconfig創(chuàng)建了HttpModule并放到了 Httpapplication的工作表中,而Httpapplication則是根據(jù)這個(gè)工作表去工作的,并且HttpRunTime也創(chuàng)建了 Context這個(gè)箱子,并把它交給了Httpapplication。以后的事情就是Httpapplication找到的兩個(gè)程序員 HttpModule和HttpHandler去完成了。
總結(jié)一些HttpRunTime做了哪些事情:
第一:雇傭了HttpApplication。。。。
第二:根據(jù)配置文件創(chuàng)建了HttpModule列表。HttpApplication就是按照這個(gè)工作列表去工作的。。。。
第三:創(chuàng)建了上下文環(huán)境(就是Context這個(gè)箱子,箱子中包括Request和Response兩大主要對(duì)象),并轉(zhuǎn)交給了HttpApplication的手中。。。。
第四:等著返回結(jié)果。。。。
如果您看完這篇文章有些不理解,請(qǐng)首先閱讀系列一。
可是還有些問(wèn)題需要解決:
第一:HttpModule到底是什么東西呢,HttpApplication為什么會(huì)按照它的工作列表去工作呢?
第二:HttpHandler又是怎么去處理頁(yè)面的請(qǐng)求的呢,又是怎么生成Html代碼返回給留言器的呢?
其實(shí)HttpModule和HttpHandler是Asp.Net生命周期中兩大非常重要的對(duì)象,我打算單獨(dú)介紹,還請(qǐng)接續(xù)關(guān)注......
總結(jié)
以上是生活随笔為你收集整理的Asp.Net生命周期系列二的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 长沙博澳投资是国企吗
- 下一篇: Asp.Net生命周期系列三