<s id="2e0qm"><div id="2e0qm"></div></s>
<div id="2e0qm"><button id="2e0qm"></button></div>
<small id="2e0qm"></small>
<div id="2e0qm"></div>
<div id="2e0qm"><s id="2e0qm"></s></div>
<div id="2e0qm"><button id="2e0qm"></button></div>
主頁 > 知識庫 > 網絡編程 > ASP/.NET >

Asp.Net生命周期系列一

來源:中國IT實驗室 作者:佚名 發表于:2013-07-15 16:08  點擊:
Asp.Net生命周期對于初級甚至中級程序員來說,一直都是一個難題,很多程序員不了解生命周期,導致使用Asp.Net做開發感覺很不靈活,感覺太多東西被微軟封裝好了,我們不能改變,其實只要你稍微了解一下就知道,原來不是這樣的! 我寫這一系列文章是采用總分的
 Asp.Net生命周期對于初級甚至中級程序員來說,一直都是一個難題,很多程序員不了解生命周期,導致使用Asp.Net做開發感覺很不靈活,感覺太多東西被微軟封裝好了,我們不能改變,其實只要你稍微了解一下就知道,原來不是這樣的!  我寫這一系列文章是采用總分的方式,先讓大家整體了解,然后再逐一突破。先將一個故事,也是園子里看到的 我認為這個寫的有些細節上的錯誤,稍稍添加些自己的想法和理解,如有錯誤,還請留言!
  當你訪問博客園想看我的這篇文章的時候,這個請求就被博客園的WEB SERVER(IIS)接收到了【其實是被IIS中的一個叫做inetinfo.exe的進程截獲了】。博客園IIS看了一眼你的請求,“噢, 是.aspx啊,給aspnet_isapi.dll去處理吧,就把我這個請求給了aspnet_isapi.dll, 并且說:“這個你來處理,你處理完了之后把HTML給我,我好給請求者一個回復”。
  aspnet_isapi.dll收到IIS傳遞過來的請求后也沒時間抱怨啊 就開始干活兒了。怎么干的呢?其實啊很簡單,就是通過一個http pipeline管道轉交給了aspnet_wp.exe進程,接下來就到了.netFramework的HttpRunTime處理中 心,HttpRunTime它其實就是做了幾件事情。
  第一,它先創建了一個Context對象,它就像個箱子,箱子當然是來裝東西的啦,裝什么呢?
  第二,HttpRunTime創建了一個Request對象,包含了IIS傳遞給它的所有信息(IIS傳遞過來的實際就是個Request嘛)。
  第三,HttpRunTime接著又創建了一個Response對象,用來裝HTML的,也放進箱子(Context)
  第四,然后,HttpRunTime說,太累了,這活兒沒個干,還是雇個人吧。就找到了HttpApplication Factory公司要了一個項目經理(HttpApplication對象),然后就把箱子(Context)交給項目經理并且對它說,這里有我們收到的 Request,你需要做的就是把 里面的Reponse填一下,具體怎么干你掂量著吧,就走了。
  這個項目經理(HttpApplication對象)就想啊,憑啥活兒我干錢你們拿啊?不行,我得找倆苦力去,于是就有了:程序員 HttpModule和程序員HttpHandler,姑且就稱他們為P_Module和 P_Handler吧,項目經理先找到了P_Module,并且給予了p_Module足夠大的權力,P_Module(HttpModule)非常的能 干,它能夠去查看HttpRunTime交給項目經理(HttpApplication對象)的箱子(Context),并且根據里面的東西做一些決定, 比如安全啊 (FormsAuthenticationModule),狀態啊(SessionStateModule )等等吧。 在P_Module工作完成之后(也許已經改變了箱子里(Context)的內容),然后他就轉交給他的副手P_Handler來做填充Response 的工作。 可是啊,想找個合適的P_Handle也很難啊,找了好久也沒找到,好吧,找獵頭(HttpHandler Factory)吧。獵頭公司一看,“噢,要.aspx Handler啊",于是找來了一個天生就善于并且愿意處理頁面的P_Handler,所以呢P_Module就把自己處理過的箱子交給它并且說:"處理 一下這個箱子里的東西,然后交給我"。
  P_Handler是個天生的處理頁面的牛人,它根據Request對象里的東西是用 了一招"乾坤大挪移",不知道怎么挪的,就挪出了HTML并塞進了Response對象中。P_Handler自信的笑了一聲,把箱子交還給了 HttpModule。然后呢再一層一層的把這個箱子向上傳遞【不能越級啊,每個人都有自己頂頭上司,只能把箱子交給自己的頂頭上司】,最后就傳給了 IIS,IIS又給了你了,你就看到這篇文章了。
  故事就是故事,故事就是故去的事,就是往事。那往事肯定就有遺漏的地方。那我們這個故事遺漏了哪些地方呢?
  第一,IIS和ASP.NET之間的交互不是像我說的那么簡單而直接的,中間還發生了很多事情。
  第二,HttpModule,也就是我們的程序員P_Module, 它其實還能干很多事情,我們并沒有去發掘。
  第三,HttpHandler,也就是我們的程序員P_Handler,它的"乾坤大挪移"就是ProcessRequest方法,這里并沒有詳述到。

    有幫助
    (1)
    100%
    沒幫助
    (0)
    0%
    真人女荫道口100种图片
    <s id="2e0qm"><div id="2e0qm"></div></s>
    <div id="2e0qm"><button id="2e0qm"></button></div>
    <small id="2e0qm"></small>
    <div id="2e0qm"></div>
    <div id="2e0qm"><s id="2e0qm"></s></div>
    <div id="2e0qm"><button id="2e0qm"></button></div>