<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        IIS處理Asp.net請求和Asp.net頁面生命周期說明

        來源:懂視網 責編:小采 時間:2020-11-27 22:42:51
        文檔

        IIS處理Asp.net請求和Asp.net頁面生命周期說明

        IIS處理Asp.net請求和Asp.net頁面生命周期說明:首先我們要弄清楚兩個非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的來自客戶端的請求并給出響應。它是IIS下asp.net應用程序的核心。 2, application pool. 它是worker process的容器,IIS5及之前的IIS
        推薦度:
        導讀IIS處理Asp.net請求和Asp.net頁面生命周期說明:首先我們要弄清楚兩個非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的來自客戶端的請求并給出響應。它是IIS下asp.net應用程序的核心。 2, application pool. 它是worker process的容器,IIS5及之前的IIS

        首先我們要弄清楚兩個非常重要的概念:
        1, worker process(w3wp.exe). worker process管理所有的來自客戶端的請求并給出響應。它是IIS下asp.net應用程序的核心。
        2, application pool. 它是worker process的容器,IIS5及之前的IIS版本均沒有application pool的概念。每一個application pool對應著一個worker process,在IIS Metabase中維護著Application Pool和worker process的Mapping。這就避免了IIS5中出現的worker process(IIS5中是aspnet_wp.exe,同一時間只能運行一個該進程)崩潰,application全崩潰的局面。
        客戶端向IIS發出一個資源請求后發生了如下事情:
        1, server接受該請求
        IIS6通過內核模式(Kernel mode)中的HTTP.SYS來分發各個Request到application pool。 這并不是隨機的過程,在application pool創建的時候就已經注冊到了HTTP.SYS,所以當請求來到時HTTP.SYS會直接發送到相應的application pool。 接下來在IIS的用戶模式(User mode)中,Web Admin Services (WAS) 做了從HTTP.SYS中得到Request并分發到application pool的工作。application pool直接把request傳遞給worker process。
        2, 請求傳遞到worker process后,worker process初始化加載ASP.NET ISAPI(Internet Server Application Program Interface),ASP.NET ISAPI進而加載CLR創建托管環境。
        (注:ISAPI只是一個接口,起到一個代理的作用,主要能力就是根據Request URL的后綴來尋找該后綴的處理程序)
        ASP.NET ISAPI定義在aspnet_isapi.dll中,它本身運行在一個非托管的環境中。ASP.NET ISAPI開始一個HttpRuntime, HttpRuntime調用ProcessRequest方法來開始處理請求。ProcessRequest根據ISAPI傳進來的iWRType 來創建不同的HttpWorkerRequest,從而屏蔽了不同IIS的差異。接下來ProcessRequest方法創建了HttpContext,我們使用HTTPContext.Current來訪問它。在HttpRuntime使用HttpApplicationFactory創建了HttpApplication對象(IHttpHandler)以后,所有的請求都會在通過httpmodule后找到相應的Httphandler進行處理。在HttpApplicationFactory創建HttpApplication之前,會查找config(web.config和Machine.config)文件中注冊的所有的HttpModule,并根據配置信息加載相應的Assembly,通過Reflection創建對應的HttpModule,并將這些Module加到HttpApplication 的_moduleCollection Filed中。我們對一個Application的請求最終會落到一個HttpApplication對象上。當一個請求到來時,ASP.NET會在Httplication Pool中查找未被使用的HttpApplication對象。
        3, 請求通過HTTP管道后,每個請求都發向相關的各自的httphandler,IIS請求處理過程結束。
        HttpHandler是HTTP管道的終點,它為每個request生成輸出。System.Web.UI.Page就是這樣一個典型的Httphandler,當我們請求一個aspx頁面,這個HttpHandler就生成html發送回客戶端。看Page類的簽名:
        public class Page : TemplateControl, IHttpHandler
        {
        }
        可以看到,Page類就是一個HttpHandler。
        綜上整個過程就是:當客戶端向服務器發送資源請求時,請求首先到達IIS的HTTP.SYS。然后HTTP.SYS發送請求道對應的Application Pool。 然后Application Pool發送請求到Worker Process(W3WP.exe)中加載ISAPI Extension,ISAPI創建一個HttpRuntime對象來通過HttpModule和HttpHandler處理請求。 然后頁面生命周期就開始了。
        4, 頁面生命周期開始
        頁面生命周期的主要階段包括:
        頁面初始化(Init): 服務器創建服務器控件的實例
        加載(load): 控件實例被加載到它定義的頁面對象中
        預輸出:(PreRender) 對控件的更改被更新,準備輸出。
        保存(SaveViewState): 控件的狀態信息被保存。
        輸出頁面(Render):服務器為控件創建html標記。
        處理(Dispose): 主要做的工作就是dispose, 關閉數據庫連接,文件資源的釋放等。
        卸載(Unload):銷毀服務器控件的實例
        頁面生命周期的主要事件:
        PreInit:
        1.檢查IsPostBack 屬性
        2.動態設置Master Page
        3.動態設置Theme
        4.設置控件的默認值(UniqueId等)
        5.重新創建動態控件(初始化控件),初始化控件的值
        Init: 這個事件發生在所有的控件被初始化,所有的皮膚設置被應用以后。它用來讀取或者初始化控件屬性。它能夠用來注冊一些aspx頁面中沒有指出的控件的事件。
        InitComplete: Use this event for processing tasks that require all initialization to be complete.
        PreLoad: 加載頁面的ViewState和所有的控件,然后處理所有的包含在Request實例中的postback數據。
        Load: 這個事件可能是大家最熟悉的了。需要注意的是,Page對象會遞歸的調用子控件的onload事件直到頁面和所有的子控件被加載完成。這個事件主要用來設置控件屬性的值,建立數據庫連接(通常不這么做)。
        Control events: 這個就不多說了,主要是處理控件的事件,例如click。這也就讓我們明白了每次我們click一個Button的時候,實際上是要先去執行load事件然后才執行click事件的,一般我們用!IsPostBack來判斷一下從而避免執行不必要的加載邏輯。
        LoadComplete: 頁面所有的控件都被加載以后執行,暫時沒有想到用來干什么。。
        PreRender: 在HTML被生成之前這是最后一個事件。每一個頁面中的控件都有PreRender的過程。在這里對將要輸出的HTML結果進行最后一次修改。
        SaveStateComplete: 在這個時間發生之前,已經保存了所有控件和頁面的,任何對page或者控件的改動都不會產生左右。暫時沒想到用來干啥。
        Render: 它不是一個事件而是一個方法。工作就是把HTML寫回客戶端瀏覽器。
        UnLoad: 頁面中的每一個控件都會發生這件事。在控件中,使用這個事件來做清理工作,例如關閉數據庫連接等。對與頁面本身也是做清理工作,例如關閉打開的文件和數據庫連接,或者結束日志或者其它指定的工作。
        需要說明的是,每次Request都會創建一個全新的Page類的實例,所以在頁面中的自己定義的字段是不能在兩次request中傳遞值的,需要使用viewstate來存儲。
        5, HttpHandler根據頁面生命周期中事件的處理把結果發回IIS,IIS再把結果發回客戶端瀏覽器。
        值得注意的是,在這個過程中請求會再次通過HttpModule(注冊一個EndRequest事件)。
        至此,整個Request結束。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        IIS處理Asp.net請求和Asp.net頁面生命周期說明

        IIS處理Asp.net請求和Asp.net頁面生命周期說明:首先我們要弄清楚兩個非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的來自客戶端的請求并給出響應。它是IIS下asp.net應用程序的核心。 2, application pool. 它是worker process的容器,IIS5及之前的IIS
        推薦度:
        標簽: 處理 請求 頁面
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲精品在线电影| 久久免费精品视频| 成人在线免费视频| 亚州免费一级毛片| 亚洲成a人片在线观看老师| 91久久亚洲国产成人精品性色 | 国产精品99精品久久免费| 和日本免费不卡在线v| 亚洲性日韩精品国产一区二区| 亚洲国产成人精品无码区在线网站| 日日狠狠久久偷偷色综合免费 | 国产亚洲?V无码?V男人的天堂| 亚洲精品一二三区| 99在线热视频只有精品免费| 亚洲国产V高清在线观看| 成人精品综合免费视频| 亚洲熟妇av一区二区三区| 高潮内射免费看片| 精品久久久久久久久免费影院| 亚洲AV综合色区无码二区偷拍 | 亚洲av永久无码精品天堂久久| 动漫黄网站免费永久在线观看| 亚洲Av无码专区国产乱码DVD | 深夜福利在线视频免费| 国产综合亚洲专区在线| 免费国产高清毛不卡片基地| 在线a毛片免费视频观看| 久久久久精品国产亚洲AV无码| 永久免费毛片手机版在线看| 亚洲av永久无码精品三区在线4| 免费无码黄动漫在线观看| 深夜特黄a级毛片免费播放| 亚洲精品卡2卡3卡4卡5卡区| www免费插插视频| 亚洲国产综合精品一区在线播放| 日韩亚洲产在线观看| 亚洲男人天堂2020| 久久久高清免费视频| 免费一级特黄特色大片| 亚洲网站在线观看| 最近免费中文字幕大全免费版视频 |