亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Asp.Net請求處理機制

2019-11-14 14:30:10
字體:
來源:轉載
供稿:網友

原文:http://www.49028c.com/cilence/archive/2012/05/28/2520712.html

 

asp.net 請求處理機制
 
前言
我們都知道Web請求響應是基于Http協議,那么我們可以這樣來理解,一次Web請求和響應的過程,實際上就是一次發送Http請求和接收Http響應的過程。
客戶端向服務器發送一次Http請求,服務器端接收到這次請求,并生成響應報文
,將響應報文發送回客戶端。這樣客戶端和服務器端就完成了一次Web交互。
 
什么是Asp.Net呢?
我喜歡把Asp.Net定義如:
Asp.Net 是一個運行在CLR的托管代碼上,從前到后處理Web請求,并響應Web請求的一個AOP框架,它是處理Web請求的一種引擎。它不是僅僅是我們常用的WebForm,WebService,IHttpHandler這些,它還有很多.....
 
 
從瀏覽器到服務器的過程
我們來看一下,當我們在瀏覽器地址欄輸入http://www.49028c.com博客園的網址時,并敲擊回車鍵。這個時候就會從瀏覽器端生成一個Request請求,并發送給http://www.cnblgos.com的web服務器
,當請求到達web服務器的那一刻,web服務器Windows內核中的HTTP.SYS組件就會捕獲到請求。當HTTP.SYS組件分析到這是一個需要交給IIS服務器處理的Http請求時,HTTP.SYS組件就會將Request請求,交給IIS服務器來處理。IIS服務器分析Request請求的context-type類型,然后從處理程序映射表中去匹配,當在處理程序映射表中能夠匹配到Request請求的context-type類型時,那么IIS服務器就將請求交給映射表中所對應的程序處理。
圖一 : IIS中 處理程序映射表
當IIS發現,在處理程序映射表中沒有能匹配的項的時候(當沒有匹配項的時候,一般情況下是請求"靜態文件"),就直接去下載Request請求所對應路徑的文件。如.jpg,html,xml.CSS文件等等。
圖二 : 從瀏覽器到達服務器的過程
 
回到之前,當服務器在處理如aspx.ashx,等等動態文件的時候,IIS服務器將Request請求,交
給aspnet_isapi.dll文件來處理。
 
ISAPI是第一個也是性能最高Request請求報文最原始的Web請求切入點
aspnet_isapi.dll是一個非常底層,并且是非托管的win32API,這個dll非常簡單,非常高效,并且還被微軟優化過性能。它用來處理最底層的 指令以及函數回調,并為高層程序提供了應用程序級別服務的功能和接口。
當aspnet_isapi.dll接收到Request請求的時候,aspnet_isapi.dll就會去調動Web服務器中的.Net Framework,最終加載CLR運行環境,并創建一個ISAPIRuntime對象,然后調用ISAPIRuntime對象的PRocessRequest()方法。
ISAPIRuntme.ProcessRequest()方法是進入ASP.Net的第一個入口
ISAPIRuntime.ProcessRequest()方法調用之后主要做了一件事情,就是將Request的原始請求信息封裝成HttpWorkRequest類,由于HttpWorkRequest類封裝的請求報文很原始,很復雜,所以微軟沒有將其公開出來。接著執行StartProcessing()方法,來創建HttpRuntime對象并調用其靜態方法ProcessRequest()。
圖三 : 如何開始ASP.Net
HttRuntime,HttpContext,Httpapplication ?
 
在HttpRuntime對象調用其靜態方法ProcessRequest()之后,我們的Web請求開始慢慢進入應用層級別,why?
ProcessRequest()這個方法做了很多事情,具體可以通過Reflector工具查看,但是大致分為四個部分:
1.為請求創建了一個新的HttpContext實例(這個對象就是我們常用的HttpContext上下文對象),并將HttpWorkRequest中最原始的請求
報文封裝到HttpContext對象的HttpRequest對象中。
2.通過HttpApplicationFactory(應用程序工廠)得到一個具體的HttpApplication 實例。
3.調用HttpApplication.Init()方法來建立事件請求管道。
4.Init()方法觸發了HttpApplication.ResumeProcessing()方法來開始執行Asp.Net事件請求管道。
圖四 : HttpRuntime,HttpApplication和HttpContext的關系
Asp.Net事件請求管道詳解
 
前面說Asp.Net是一個Aop框架,而Asp.Net事件請求管道就是一點。
Asp.Net事件請求管道,是微軟幫程序員提供來處理Web請求的一些列事件,這些事件是依次執行,我們可以通過在這些事件上注冊或移除我們自己寫的方法,來修改Web請求執行的邏輯。
 
圖五 : ASP.Net事件請求管道
 
在第八個事件的時候,會創建請求的頁面對象,并轉換為IHttpHandler接口。
 
在第九個事件到第十一個事件之間,會接收到瀏覽器發過來的sessionId。并先會將IHttpHandler接口嘗試轉換為IRequiresSessionState接口,如果轉換成功,Asp.Net會根據這個SessionId到服務器的Session池中去查找所對應的Session對象,并將這個Session對象賦值到HttpContext對象的Session屬性。如果嘗試轉換為IRequiresSessionState接口不成功,則不加載Session。
 
在第十一個事件到第十二個事件之間,會調用在第八個事件創建的頁面對象的ProcessRequest方法。
當我們直接使用*.ashx頁面的時候,就直接調用了一個FrameworkInitialize(),并最終生成響應報文,發送回客戶端。
當我們在使用*.aspx頁面的時候,它繼承自Page類,而Page類實現了IHttpHandler接口。
由于Page類實現了IHttpHandler接口,在ProcessRequest方法中,調用了FrameworkInitialize()方法。
在FrameworkInitialize()這個方法內部就開始打造Asp.Net的頁面控件樹(打造html樹),在其中就調用了ProcessRequestMain方法,在這個方法里面就執行了整個Asp.Net頁面生命周期。
 
IHttpModules
請求通過事件管道,一些列的事件被觸發了,我們可以通過在Global.asax全局配置文件中看到這些事件。
但是由于這是由程序分配的事件,可能就不是我們想要的。如果我們想要創建一個能夠復用的HttpApplication事件管道來處理Web請求,
我們又想將這些代碼復用,或者開發成插件的形式。那么我們就可以使用IHttpModules。
IHttpModules配置很簡單,我們只需要在Web.config里面配置一下就可以了。而具體的HttpModules只需要實現IHttpModules接口,并注冊自己的方法就行了。
 
<?xml version="1.0"?>
 
<configuration>
    <system.web>
        <httpModules>
            <add name="VEVbHttpModules" type="VEVb.VEVbHttpModules"/>
        </httpModules>
    </system.web>
</configuration>
 
Web.config文件的配置
 
 
publicclass VEVbHttpModules : IHttpModule
{
    public void MyBeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = sender as HttpApplication;
        application.Context.Response.Write("這個IHttpModule具體類的寫法喲!");
    }
}
 
具體的HttpModules類寫法
 
Asp.Net頁面生命周期詳解
Asp.Net是一個Aop框架,而Asp.Net事件請求管道體現了Aop思想,而現在我們要說的Asp.Net頁面生命周期也體現Aop思想。
Asp.Net頁面生命周期的本質就是微軟提供給我們程序員修改頁面控件樹代碼的一些列事件,我們可以通過實現頁面生命周期的事件方法來修改控件樹代碼。
圖六 : ASP.Net頁面生命周期
 
當ASP.Net執行完我們注冊的生命周期事件方法的時候,最后會調用Render方法,Render方法要求傳入一個TextWriter文本寫出器對象,并遍歷所有控件樹,調用每個控件的Render方法。
所以每一個控件調用Render方法之后產生的Html字符串都依次寫入到TextWriter對象。最后ASP.Net將TextWriter中的Html字符串封裝成響應報文,然后發送回客戶端。
 
 
結束語
在這里,我介紹了一下ASP.Net的整個處理請求的過程。但有很多底層的信息,我還沒有仔細去觀察過,因此很多細節可能還是沒有注意到。這篇文章可能還是有很多錯誤的地方,希望博客園的兄弟姐妹們糾錯,謝謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品大全| 国产亚洲精品久久| 国自产精品手机在线观看视频| 亚洲精品自拍第一页| 国产精品久久激情| 91精品国产综合久久香蕉的用户体验| 性欧美xxxx交| 中文字幕一区电影| 亚洲级视频在线观看免费1级| 日韩高清中文字幕| 欧美巨猛xxxx猛交黑人97人| 国产精品免费久久久| 17婷婷久久www| 亚洲欧美一区二区三区四区| 国产精品视频免费在线观看| 国产成人精品久久| 国产免费亚洲高清| 国产精品国产亚洲伊人久久| 7777kkkk成人观看| 国产欧美日韩精品专区| 51ⅴ精品国产91久久久久久| 国产亚洲xxx| 国产自摸综合网| 欧美做受高潮1| 久久影视电视剧凤归四时歌| 亚洲国产婷婷香蕉久久久久久| 亲爱的老师9免费观看全集电视剧| 日韩国产在线播放| 亚洲精品美女久久久| 亚洲最大成人网色| 国产亚洲人成网站在线观看| 国产91精品青草社区| 亚洲免费伊人电影在线观看av| 日韩激情av在线播放| 国产精品流白浆视频| 亚洲国产另类 国产精品国产免费| 国产91在线播放九色快色| 欧美激情xxxx性bbbb| 中国人与牲禽动交精品| 亚洲欧美一区二区三区四区| 亚洲午夜精品久久久久久久久久久久| 欧美日韩亚洲激情| 亚洲美女福利视频网站| 亚洲男人的天堂在线播放| 久久99热精品| 国产成人精品视频在线| 欧美日韩国产123| 在线播放国产一区二区三区| 日韩av免费在线看| 亚洲白拍色综合图区| 日韩美女视频在线观看| 亚洲精品综合久久中文字幕| 国产精品亚发布| 在线观看欧美www| 国产精品偷伦免费视频观看的| 色视频www在线播放国产成人| 5252色成人免费视频| 色小说视频一区| 国产一区二区三区精品久久久| 亚洲一区二区久久久久久久| 日韩电影免费在线观看中文字幕| 日韩av在线看| 久久精品视频网站| 性欧美xxxx视频在线观看| 国产精品视频一区国模私拍| 成人啪啪免费看| 精品国产一区二区三区久久| 国产精品亚洲精品| 国产偷亚洲偷欧美偷精品| 日韩禁在线播放| 亚洲精品久久久久久久久| 亚洲欧美在线第一页| 精品国产老师黑色丝袜高跟鞋| 久久久久久久国产精品| 亚洲午夜精品久久久久久久久久久久| 国产一区二区三区视频免费| 2019中文字幕在线观看| 激情久久av一区av二区av三区| 欧美性猛交xxxx免费看久久久| 成人午夜黄色影院| 色狠狠久久aa北条麻妃| 68精品久久久久久欧美| 亚洲男人av在线| 精品久久久一区二区| 欧美香蕉大胸在线视频观看| 久久91精品国产91久久久| 欧美在线观看网站| 日韩精品视频在线观看免费| 国产精品一区二区性色av| 国产精品高潮呻吟久久av无限| 久久九九精品99国产精品| 中国china体内裑精亚洲片| 欧美日韩国产影院| 精品一区二区亚洲| 国产精品a久久久久久| 久久综合久久八八| 青青a在线精品免费观看| 91精品国产91久久久久久久久| 91免费电影网站| 性色av一区二区咪爱| 97视频在线观看亚洲| 久久夜色撩人精品| 久久久久久中文字幕| 成人天堂噜噜噜| 少妇高潮 亚洲精品| 国外视频精品毛片| 色噜噜狠狠狠综合曰曰曰88av| 亚洲国产美女精品久久久久∴| 欧美大片va欧美在线播放| 欧美午夜片欧美片在线观看| 日韩精品视频在线观看网址| 欧美成人激情视频| 久久亚洲春色中文字幕| 日韩精品中文字幕久久臀| 国产噜噜噜噜久久久久久久久| 亚洲精品自在久久| 亚洲美女喷白浆| 久久全国免费视频| www日韩欧美| 亚洲欧美国产日韩中文字幕| 久久人人爽人人爽人人片av高请| 亚洲人精品午夜在线观看| 欧美性色视频在线| 亚洲男人的天堂网站| 不卡伊人av在线播放| 国产综合久久久久| 7777精品视频| 日韩欧美aⅴ综合网站发布| 久久亚洲综合国产精品99麻豆精品福利| 亚洲天堂久久av| 亚洲精品一区中文字幕乱码| 国产免费亚洲高清| 色妞一区二区三区| 久久电影一区二区| 亚洲国产精品人久久电影| 亚洲乱亚洲乱妇无码| 日韩美女视频免费在线观看| 欧美中文在线观看| 日韩经典中文字幕| 91久久夜色精品国产网站| 91欧美精品成人综合在线观看| 国产精品视频yy9099| 国产精品欧美日韩久久| 亚洲午夜国产成人av电影男同| 久久99精品久久久久久噜噜| 久久伊人精品视频| 亚洲男女自偷自拍图片另类| 欧美激情欧美狂野欧美精品| 国产成人精品av在线| 91精品国产91久久久久福利| 久久的精品视频| 色综合色综合网色综合| 中文字幕欧美日韩va免费视频| 亚洲女人天堂成人av在线| 亚洲一区二区三区777| 欧美亚洲另类视频| 国产精品香蕉国产| 中文字幕精品在线视频| 亚洲欧洲日韩国产| www.xxxx欧美| 北条麻妃一区二区在线观看| 国产成人avxxxxx在线看| 欧美精品九九久久| 欧美午夜xxx|