8AV国产精品爽爽Va在线观看_国产精品视频免费播放_综合精品综合一区二区_蜜臀福利视频免费观看

品優(yōu)網(wǎng)絡(luò) 十六年(2003-2018)專注
IIS處理Asp.net請求和Asp.net頁面生命周期
日期:2014-12-31 作者:admin 來源: 瀏覽次數(shù):0 網(wǎng)友評論 0

企業(yè)網(wǎng)站推廣1

當(dāng)一個客戶端頁面訪問IIS試圖獲取一些信息的時候,發(fā)生了什么事情?一個請求在通過了HTTP管道后又發(fā)生了什么?本文主要是描述這兩個過程,即IIS處理asp.net請求和asp.net的頁面生命周期。歡迎大家積更拍磚,共同學(xué)習(xí),共同進步。

首先我們要弄清楚兩個非常重要的概念:

1, worker process(w3wp.exe). worker process管理所有的來自客戶端的請求并給出響應(yīng)。它是IIS下asp.net應(yīng)用程序的核心。

2, application pool. 它是worker process的容器,IIS5及之前的IIS版本均沒有application pool的概念。每一個application pool對應(yīng)著一個worker process,在IIS Metabase中維護著Application Pool和worker process的Mapping。這就避免了IIS5中出現(xiàn)的worker process(IIS5中是aspnet_wp.exe,同一時間只能運行一個該進程)崩潰,application全崩潰的局面。

客戶端向IIS發(fā)出一個資源請求后發(fā)生了如下事情:

1, server接受該請求

IIS6通過內(nèi)核模式(Kernel mode)中的HTTP.SYS來分發(fā)各個Request到application pool。 這并不是隨機的過程,在application pool創(chuàng)建的時候就已經(jīng)注冊到了HTTP.SYS,所以當(dāng)請求來到時HTTP.SYS會直接發(fā)送到相應(yīng)的application pool。 接下來在IIS的用戶模式(User mode)中,Web Admin Services (WAS) 做了從HTTP.SYS中得到Request并分發(fā)到application pool的工作。application pool直接把request傳遞給worker process。

2, 請求傳遞到worker process后,worker process初始化加載ASP.NET ISAPI(Internet Server Application Program Interface),ASP.NET ISAPI進而加載CLR創(chuàng)建托管環(huán)境。

(注:ISAPI只是一個接口,起到一個代理的作用,主要能力就是根據(jù)Request URL的后綴來尋找該后綴的處理程序)

ASP.NET ISAPI定義在aspnet_isapi.dll中,它本身運行在一個非托管的環(huán)境中。ASP.NET ISAPI開始一個HttpRuntime, HttpRuntime調(diào)用ProcessRequest方法來開始處理請求。ProcessRequest根據(jù)ISAPI傳進來的iWRType 來創(chuàng)建不同的HttpWorkerRequest,從而屏蔽了不同IIS的差異。接下來ProcessRequest方法創(chuàng)建了HttpContext,我們使用HTTPContext.Current來訪問它。在HttpRuntime使用HttpApplicationFactory創(chuàng)建了HttpApplication對象(IHttpHandler)以后,所有的請求都會在通過httpmodule后找到相應(yīng)的Httphandler進行處理。在HttpApplicationFactory創(chuàng)建HttpApplication之前,會查找config(web.config和Machine.config)文件中注冊的所有的HttpModule,并根據(jù)配置信息加載相應(yīng)的Assembly,通過Reflection創(chuàng)建對應(yīng)的HttpModule,并將這些Module加到HttpApplication 的_moduleCollection Filed中。我們對一個Application的請求更終會落到一個HttpApplication對象上。當(dāng)一個請求到來時,ASP.NET會在Httplication Pool中查找未被使用的HttpApplication對象。

3, 請求通過HTTP管道后,每個請求都發(fā)向相關(guān)的各自的httphandler,IIS請求處理過程結(jié)束。

HttpHandler是HTTP管道的終點,它為每個request生成輸出。System.Web.UI.Page就是這樣一個典型的Httphandler,當(dāng)我們請求一個aspx頁面,這個HttpHandler就生成html發(fā)送回客戶端。看Page類的簽名:

public class Page : TemplateControl, IHttpHandler

{

}

可以看到,Page類就是一個HttpHandler。

綜上整個過程就是:當(dāng)客戶端向服務(wù)器發(fā)送資源請求時,請求首先到達IIS的HTTP.SYS。然后HTTP.SYS發(fā)送請求道對應(yīng)的Application Pool。 然后Application Pool發(fā)送請求到Worker Process(W3WP.exe)中加載ISAPI Extension,ISAPI創(chuàng)建一個HttpRuntime對象來通過HttpModule和HttpHandler處理請求。 然后頁面生命周期就開始了。

IIS處理Asp.net請求和Asp.net頁面生命周期,與大家多多交流。

企業(yè)網(wǎng)站推廣2

查看更多寧波網(wǎng)站制作公司Asp.net生命周期頁面

寧波網(wǎng)站建設(shè) (http://www.sdjianlida.com/) 版權(quán)與免責(zé)聲明
    1、凡本網(wǎng)注明“來源:寧波品優(yōu)網(wǎng)絡(luò)”字樣的所有作品,版權(quán)均屬于浙江省寧波海曙品優(yōu)網(wǎng)絡(luò)技術(shù)有限公司,如需轉(zhuǎn)載、摘編或利用其它方式使用上述作品,請與本網(wǎng)聯(lián)系。
    2、凡本網(wǎng)注明“來源:XXX(非寧波品優(yōu)網(wǎng)絡(luò))”的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責(zé)。寧波網(wǎng)站建設(shè)的轉(zhuǎn)載僅為信息的廣泛傳播,如有侵權(quán)請及時告之刪除。
返回:寧波網(wǎng)站制作公司