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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Asp.Net請(qǐng)求處理機(jī)制

2019-11-14 14:20:06
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

 

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
激情综合五月网| 成 人免费视频播放| 日韩免费精品视频| 日韩中文字幕久久久经典网| 热re99久久精品国99热蜜月| 久久香蕉频线观| 欧美精品videossex88| 日韩午夜激情av| 欧美俄罗斯乱妇| 国产一区二区三区日韩| 夜先锋av资源| 亚洲欧美日韩一区二区在线| 我要看黄色一级片| 日韩欧美美女在线观看| 第一会所亚洲原创| 天堂中文最新版在线中文| 日韩视频不卡| julia一区二区三区中文字幕| 欧美一级黄色大片| 亚洲一区二区三区在线观看网站| 韩国av免费在线观看| 国产精品久久久久久久9999| 免费污污视频在线观看| 国产经典久久久| 在线看的你懂得| 97香蕉久久超级碰碰高清版| 成人ww免费完整版在线观看| 久久久777精品电影网影网| 国产日产欧美一区| 色噜噜狠狠色综合欧洲selulu| 久久国产精品久久| 国产中文字幕视频在线观看| 日本一级黄视频| 日韩中文字幕| 欧美色欧美亚洲另类七区| 国产欧美日韩中文久久| 国产日产欧美a一级在线| 欧美一级特黄aaaaaa| 亚洲精品国产精品乱码不卡| 男女午夜刺激视频| 九一成人免费视频| 中文有码在线| 成人午夜在线影院| 2018天天弄| 国产一卡不卡| 99在线观看视频免费| 欧美5-7sexvideos处| 久久久这里只有精品视频| 免费亚洲一区二区| 在线观看成人黄色| 久久久久观看| 伊人波多野结衣| 人人澡人人添人人爽一区二区| 日韩视频一区二区三区| 青青久精品观看视频最新| 国产成人久久精品一区二区三区| 偷拍日韩校园综合在线| 亚洲综合自拍网| 国产精品国产三级国产专区51| 国产精品一级视频| 青青青在线视频播放| 999久久久精品国产| 欧美一级高清免费播放| 免费观看久久久久| 欧美日韩一区二区三区视视频| 精品一区二区免费| 77777_亚洲午夜久久多人| 日本孕妇大胆孕交无码| 国产乱人视频免费播放| 日韩电影大片中文字幕| 朝桐光av在线| 亚洲一区视频在线观看视频| 中文在线观看免费视频| 成人福利视频在线看| 中文成人av在线| 亚洲色精品三区二区一区| 视频一区三区| 国内精品国产三级国产a久久| 成人日韩在线电影| 亚洲一级免费视频| 粉嫩tv在线播放| 国产精品99精品无码视亚| 国产精品入口久久| av中文字幕第一页| av在线观看地址| 色综合天天狠天天透天天伊人| 日韩精品在线观看一区| 欧美一二三区精品| 欧美精品亚洲一区二区在线播放| 成人免费看黄网站| 日韩精品亚洲人成在线观看| 成人一级生活片| 午夜免费日韩视频| 亚洲欧洲日夜超级视频| 9191国语精品高清在线| 色哟哟中文字幕| 污污网址在线观看| 精品日韩欧美一区| 国产亚洲精品成人a| 亚洲国产欧美另类丝袜| 福利网址在线观看| 一区二区三区久久网| 欧美精品视频www在线观看| 福利电影一区| 岛国片在线看| 精品人妻一区二区三区含羞草| 91久久精品美女高潮| 国产成人免费视频精品含羞草妖精| 日本高清xxxx| 国产精品盗摄久久久| 欧美99久久| 色狠狠久久av综合| 精品国产无码AV| 成人区人妻精品一区二| 一区二区三区av在线| 香港三级经典全部种子下载| 欧美一级电影免费在线观看| 欧美另类交视频| 亚洲欧美日韩国产一区二区| 精品少妇一区二区三区免费观看| 国产视频一区二区在线观看| 国产又粗又长又硬| 97精品人妻一区二区三区在线| 樱花草在线观看www| 男女性杂交内射妇女bbwxz| 欧美日本一道本在线视频| 久久伊人中文字幕| 国产色产综合产在线视频| 人人超碰91尤物精品国产| 亚洲动漫在线观看| 欧美喷水视频| 91蝌蚪在线| 日本一二三区在线观看| 激情五月婷婷综合网| 精品夜夜澡人妻无码av| 精品少妇一二三区| 三级在线视频| 99蜜桃在线观看免费视频网站| 亚洲午夜女主播在线直播| 影音先锋在线影院| 成人在线免费观看网站| 欧美精品在线看| 黄色软件在线| 国产精品国产三级欧美二区| 久久久精品综合| 国产精品xvideos88| 潘金莲一级淫片aaaaa| 在线观看日韩高清av| 成人18夜夜网深夜福利网| 免费的毛片视频| 欧美精品在线一区二区三区| 久久国产精品高清| 日韩av高清在线观看| 在线视频不卡一区二区| 成人精品天堂一区二区三区| 在线免费看av不卡| 久久久久一区二区| 日韩精品中文字幕一区二区| 伊人精品久久| 亚洲欧美日韩图片| 一区二区在线看| 日韩欧美一级二级三级| 成人国产一区二区| 国产探花在线免费观看| 色婷五月综激情亚洲综合| 亚洲精品久久嫩草网站秘色| 精品无码国模私拍视频| 国精产品一区一区二区三区mba| 精品成人免费观看| 可以免费观看的黄色网址| 国产成人免费在线观看视频| 欧美猛男做受videos| 精精国产xxxx视频在线中文版| 欧美精品亚州精品| 成人免费看视频网站| 亚洲国产精品天堂| 亚洲精品乱码久久久久久蜜桃图片| 69精品国产久热在线观看| 在线一区日本视频| 亚洲精品v亚洲精品v日韩精品| 国产视频xxxx| 久久久777| 2020欧美日韩在线视频| 91av在线免费观看视频| 日本69式三人交| 午夜a成v人精品| 亚洲第一色av| 蜜臀久久久久久久| 国产精品一区二区x88av| 中文字幕乱码人妻综合二区三区| 免费理论片在线观看播放老| 一本色道久久综合熟妇| 99九九热只有国产精品| 91精品视频免费看| 国产精品麻豆免费版现看视频| 狠狠爱www人成狠狠爱综合网| 亚洲 小说区 图片区 都市| 欧美成人精精品一区二区频| 欧美大片日本大片免费观看| 欧美va亚洲va| 中文字幕欧美一| 日韩一级中文字幕| 亚洲无人区一区| 国产精品日韩精品欧美精品| 亚乱亚乱亚洲乱妇| 日韩有码在线视频| 91视视频在线直接观看在线看网页在线看| 在线成人欧美| 欧美视频在线观看网站| 欧美不卡一区二区三区| 伊人影院在线播放| 91国产一区在线| 日韩视频 中文字幕| 国产人妻精品一区二区三区不卡| 林心如三级全黄裸体| 欧美丰满少妇人妻精品| 精品黑人一区二区三区久久| 黄色一级片在线观看| 手机看片福利在线观看| 国产网站免费在线观看| 国产在线日韩精品| 国产福利精品一区二区三区| 亚洲国产精品狼友在线观看| 国产精品揄拍一区二区| 欧美精品123| 国产一区丝袜| 欧美色欧美亚洲另类| 亚洲国产高清高潮精品美女| 999久久久国产精品| 亚洲最大福利网站| 国产欧美日韩亚洲一区二区三区| 在线免费观看日本欧美| 男女污视频在线观看| 国产成人黄色网址| 山东少妇露脸刺激对白在线| 日本欧美中文字幕| 精品孕妇一区二区三区| 亚洲av中文无码乱人伦在线视色| 大桥未久av一区二区三区中文| 久久久亚洲国产美女国产盗摄| 国产免费无码一区二区视频| 无人区乱码一区二区三区| 亚洲女人被黑人巨大进入al| 午夜精品在线播放| 国产网红主播福利一区二区| 手机在线观看你懂的| 国产成人精品一区二区无码呦| 97香蕉碰碰人妻国产欧美| 久久久久久久久久久久久久av| 成人激情免费网站| 99精品视频在线播放免费| 无码人妻一区二区三区在线视频| 国产美女www爽爽爽| 日韩成人av网站| 亚洲美女av在线| 被陌生人带去卫生间啪到腿软| 一级在线观看| 99蜜桃在线观看免费视频网站| 亚洲天堂av图片| 91久久在线视频| av爱爱亚洲一区| 成人免费看片载| 国产精品久久久| 91在线看国产| 国产精品成人3p一区二区三区| 丁香婷婷深情五月亚洲| 精品国产中文字幕| www日韩中文字幕在线看| 91久久线看在观草草青青| 国产剧情在线视频| 国产网红女主播精品视频| 国产精品久久久久影院色老大| 国产69精品久久久久久久久久| 国内精品在线观看视频| 国语自产精品视频在线看| 亚洲天堂免费视频| 高清欧美性猛交xxxx黑人猛交| 日本学生初尝黑人巨免费视频| 牛牛电影国产一区二区| 国产精品国产精品国产| 日本中文字幕在线| 人人狠狠综合久久亚洲婷| 午夜天堂精品久久久久| 五月亚洲综合| 国产美女无遮挡永久免费| 人妻夜夜添夜夜无码av| 福利一区二区在线| 欧美艳星kaydenkross| 风间由美一区二区三区在线观看| 久热免费视频| 欧美激情视频给我| 亚洲天堂av一区二区| 久久6精品影院| 国内视频自拍在线视频| 免费全黄无遮挡裸体毛片| 国产a级毛片一区| 一区二区三区免费| 国产一区二区片| 色狠狠色狠狠综合| 国产最新免费视频| 国产视频亚洲色图| 在线免费观看av的网站| 国产精品久久久久久9999| 菠萝蜜视频国产在线播放| 九色国产蝌蚪视频| 日本手机在线视频| 影音先锋黄色网址| 91精品国产一区二区三区蜜臀| 亚洲v国产v欧美v久久久久久| 围产精品久久久久久久| 久久久com| 国产裸体舞一区二区三区| 欧美人与牛zoz0性行为| 91精品国产乱码久久久张津瑜| 在线天堂新版最新版在线8| 精品国产人妻一区二区三区| 一区二区国产精品精华液| 黄色的电影在线-骚虎影院-骚虎视频| 在线电影院国产精品| 国产成人精品久久亚洲高清不卡| 欧美极品少妇xxxxⅹ高跟鞋| 无码内射中文字幕岛国片| 精品三级久久久| 伊人久久大香线蕉av超碰| 国产精品高潮久久| 人成在线视频| 免费一级网站| 精品视频一区二区三区四区五区|