Asp.Net生命周期系列一
Asp.Net生命周期對(duì)于初級(jí)甚至中級(jí)程序員來說,一直都是一個(gè)難題,很多程序員不了解生命周期,導(dǎo)致使用Asp.Net做開發(fā)感覺很不靈活,感覺太多東西被微軟封裝好了,我們不能改變,其實(shí)只要你稍微了解一下就知道,原來不是這樣的!
我寫這一系列文章是采用總分的方式,先讓大家整體了解,然后再逐一突破。先將一個(gè)故事,也是園子里看到的(http://www.cnblogs.com/GodSpeed/archive/2010/06/19/1761095.html),我認(rèn)為這個(gè)寫的有些細(xì)節(jié)上的錯(cuò)誤,稍稍添加些自己的想法和理解,如有錯(cuò)誤,還請(qǐng)留言!
當(dāng)你訪問博客園想看我的這篇文章的時(shí)候,這個(gè)請(qǐng)求就被博客園的WEB SERVER(IIS)接收到了【其實(shí)是被IIS中的一個(gè)叫做inetinfo.exe的進(jìn)程截獲了】。博客園IIS看了一眼你的請(qǐng)求,“噢,是.aspx啊,給aspnet_isapi.dll去處理吧,就把我這個(gè)請(qǐng)求給了aspnet_isapi.dll, 并且說:“這個(gè)你來處理,你處理完了之后把HTML給我,我好給請(qǐng)求者一個(gè)回復(fù)”。
aspnet_isapi.dll收到IIS傳遞過來的請(qǐng)求后也沒時(shí)間抱怨啊 就開始干活兒了。怎么干的呢?其實(shí)啊很簡(jiǎn)單,就是通過一個(gè)http pipeline管道轉(zhuǎn)交給了aspnet_wp.exe進(jìn)程,接下來就到了.netFramework的HttpRunTime處理中心,HttpRunTime它其實(shí)就是做了幾件事情。
第一,它先創(chuàng)建了一個(gè)Context對(duì)象,它就像個(gè)箱子,箱子當(dāng)然是來裝東西的啦,裝什么呢?
第二,HttpRunTime創(chuàng)建了一個(gè)Request對(duì)象,包含了IIS傳遞給它的所有信息(IIS傳遞過來的實(shí)際就是個(gè)Request嘛)。
第三,HttpRunTime接著又創(chuàng)建了一個(gè)Response對(duì)象,用來裝HTML的,也放進(jìn)箱子(Context)
第四,然后,HttpRunTime說,太累了,這活兒沒個(gè)干,還是雇個(gè)人吧。就找到了HttpApplication Factory公司要了一個(gè)項(xiàng)目經(jīng)理(HttpApplication對(duì)象),然后就把箱子(Context)交給項(xiàng)目經(jīng)理并且對(duì)它說,這里有我們收到的Request,你需要做的就是把 里面的Reponse填一下,具體怎么干你掂量著吧,就走了。
這個(gè)項(xiàng)目經(jīng)理(HttpApplication對(duì)象)就想啊,憑啥活兒我干錢你們拿啊?不行,我得找倆苦力去,于是就有了:程序員HttpModule和程序員HttpHandler,姑且就稱他們?yōu)镻_Module和 P_Handler吧,項(xiàng)目經(jīng)理先找到了P_Module,并且給予了p_Module足夠大的權(quán)力,P_Module(HttpModule)非常的能干,它能夠去查看HttpRunTime交給項(xiàng)目經(jīng)理(HttpApplication對(duì)象)的箱子(Context),并且根據(jù)里面的東西做一些決定,比如安全啊 (FormsAuthenticationModule),狀態(tài)啊(SessionStateModule?)等等吧。 在P_Module工作完成之后(也許已經(jīng)改變了箱子里(Context)的內(nèi)容),然后他就轉(zhuǎn)交給他的副手P_Handler來做填充Response的工作。 可是啊,想找個(gè)合適的P_Handle也很難啊,找了好久也沒找到,好吧,找獵頭(HttpHandler Factory)吧。獵頭公司一看,“噢,要.aspx Handler啊",于是找來了一個(gè)天生就善于并且愿意處理頁(yè)面的P_Handler,所以呢P_Module就把自己處理過的箱子交給它并且說:"處理一下這個(gè)箱子里的東西,然后交給我"。
P_Handler是個(gè)天生的處理頁(yè)面的牛人,它根據(jù)Request對(duì)象里的東西是用 了一招"乾坤大挪移",不知道怎么挪的,就挪出了HTML并塞進(jìn)了Response對(duì)象中。P_Handler自信的笑了一聲,把箱子交還給了HttpModule。然后呢再一層一層的把這個(gè)箱子向上傳遞【不能越級(jí)啊,每個(gè)人都有自己頂頭上司,只能把箱子交給自己的頂頭上司】,最后就傳給了IIS,IIS又給了你了,你就看到這篇文章了。
故事就是故事,故事就是故去的事,就是往事。那往事肯定就有遺漏的地方。那我們這個(gè)故事遺漏了哪些地方呢?
第一,IIS和ASP.NET之間的交互不是像我說的那么簡(jiǎn)單而直接的,中間還發(fā)生了很多事情。
第二,HttpModule,也就是我們的程序員P_Module, 它其實(shí)還能干很多事情,我們并沒有去發(fā)掘。
第三,HttpHandler,也就是我們的程序員P_Handler,它的"乾坤大挪移"就是ProcessRequest方法,這里并沒有詳述到。
第四,。。。等我再想想再跟您聊。
希望這邊小文能夠幫助你更容易的理解ASP.NET生命周期,我會(huì)繼續(xù)努力,爭(zhēng)取以最簡(jiǎn)單明了的方式來speak out ASP.NET原理和運(yùn)行機(jī)制。歡迎拍磚,謝謝。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Asp.Net生命周期系列一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行商业抵押贷款最高年限
- 下一篇: Asp.Net生命周期系列二