国产亚洲福利第一页丝袜_日韩一区二区无码_亚洲一区二区三区四在线观看_欧美孕妇乳喷奶水在线观看_九九热精品在线观看_日本免费一级不卡_国产三级久久精品_女人男人做性全过程视频_美女被免费网站视频_亚洲国产欧洲综合

設(shè)為首頁加入收藏業(yè)務(wù)一覽表公司歷程公司介紹聯(lián)系我們
當(dāng)前位置網(wǎng)站建設(shè)知識(shí) >> IIS處理Asp.net請(qǐng)求和Asp.net頁面生命周期

IIS處理Asp.net請(qǐng)求和Asp.net頁面生命周期

IIS處理Asp.net請(qǐng)求和Asp.net頁面生命周期

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

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

1, worker process(w3wp.exe). worker process治理所有的來自客戶真?zhèn)€請(qǐng)求并給出響應(yīng)。它是IIS下asp.net應(yīng)用程序的核心。

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

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

1, server接受該請(qǐng)求

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

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

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

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

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

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

public class Page : TemplateControl, IHttpHandler

{

}

可以看到,Page類就是一個(gè)HttpHandler。

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

[來源:網(wǎng)絡(luò)] [作者:yukko] [日期:11-11-21] [閱讀:]