iis6.0與asp.net的運行原理

來源:互聯網
上載者:User

標籤:lease   小結   服務   中繼資料   pap   緩衝   hand   src   標準   

  這幾天上網翻閱了不少前輩們的關於iis和asp.net運行原理的部落格,學的有點零零散散,花了好長時間做了一個小結(雖然文字不多,但也花了不少時間呢),鄙人不才,難免有理解不道的地方,還望前輩們不吝賜教。

  這篇部落客要是描述asp.net程式在iis6.0上的一個執行過程。

  執行過程圖:

 

組件描述

 

 

  HTTP.SYS:

    Win2003和winXP SP2的核心作業系統組件,,能夠讓任何應用程式通過它提供的介面,以http協議進行資訊通訊。

 

  優點:

  1. 緩衝-靜態內容被緩衝於核心模式下,這使服務響應速度更快
  2. 記錄(Log)-IIS的LOG功能更快且標準化
  3. 頻寬控制
  4. 可靠性-所有的服務要求會在Http.sys裡暫存入隊列,而不是由服務程式本身來處理,這樣,即使服務程式重啟,尚未被處理的請求也不會丟失了
  5. 連接埠重用- 現在,只要是通過Http.sys管理的連接埠(基本包括了那些著名的連接埠,比如80),都可以同時允許多個程式同時監聽了。

  簡單來說它是獨立於IIS之外的,任何http請求都會首先被它偵聽到

  W3SVC:

       1. 沒有第三方應用程式的代碼

       2. 根據配置資料的設定建立和監視w3wp.exe,由背景工作執行緒運行Web網站應用程式。

 

       3. 總是處於運行狀態,因此它能夠監視Web應用的健康情況,並在必要時採取行動。由於這一策略,伺服器能夠根據使用者指定的參數監視和重新啟動應用程式。

  Application Pool(應用程式集區):

       1. 在IIS6.0中,每一個使用者web應用程式都會運行在一個應用程式集區中。這個應用程式集區可以是IIS預設的應用程式集區,也可以是使用者自訂的應用程式集區。

       2.作為一個宿主程式,每個應用程式集區中都會運行著一個或者多個使用者web應用程式。

 

       3.在應用程式集區中,存在著一個或者多個背景工作處理序(一個以上叫Web園)。每個背景工作處理序只能屬於一個特定的應用程式集區,由這些背景工作處理序來負責管理應用程式池中的使用者web應用程式。

  w3wp.exe(背景工作處理序):

  預設情況下,IIS 6.0在背景工作處理序隔離模式下運行,在這種模式中,對於每一個Web應用,IIS 6.0都用一個獨立的w3wp.exe的執行個體來運行它。 因此,背景工作處理序隔離模式不存在          進程內(In-Process)應用程式存在的問題,有效地提高了可靠性和安全性。可靠性的提高是因為一個Web應用的故障不會影響到其他Web應用,也不會影響http.sys,每一        個Web應用由W3SVC單獨地監視其健康情況。安全性的提高是由於應用程式不再象IIS 5.0和IIS4.0的進程內應用那樣用System帳戶運行,預設情況下,w3wp.exe的所有        執行個體都在一個許可權有限的“網路服務”帳戶下運行,必要時,還可以將背景工作處理序配置成用其他使用者帳戶運行。

  Metabase(中繼資料):
  1. 儲存配置資料
  2. 有一個map儲存應用程式集區和背景工作處理序的資料  
執行過程
  1. 在用戶端(一般指瀏覽器)輸入一個http://www.***.com/default.aspx/
  2. HTTP.SYS首先偵聽到請求(靜態檔案快取於核心模式下)
  3. W3SVC接收請求,判斷是否是靜態檔案,靜態檔案直接響應,否則將請求轉寄給應用程式集區的請求隊列,從中繼資料(通過WAS)中尋找應用程式集區資料,沒有則建立
  4. WAS請求傳遞給應用程式集區對應的背景工作處理序,沒有就建立(建立時載入ISAPI)
  5. ISAPI會根據ECH建立一個HttpWorkerRequest
  6. 接下來進入應用程式定義域,由Unmanaged 程式碼變為Managed 程式碼(CLR)
  7. HttpRuntime執行ProcessRequest方法產生HttpContext
  8. HttpApplicationFactory執行GetApplicationInstance方法產生HttpApplication
  9. HttpApplication執行一系列事件
Application暴露出的事件

  1.BeginRequest:asp.net開始處理請求的第一個事件,表示處理的開始。

2.AuthenticateRequest:驗證請求,一般用來取得請求的使用者資訊。

3.PostAuthenticateRequest:已經擷取請求的使用者資訊。

4.AuthorizeRequest:授權,一般用來檢查使用者的請求是否獲得許可權。

5.PostAuthorizeRequest:使用者請求已經獲得授權。

6.ResolveRequestCache:擷取以前處理緩衝的處理結果,如果以前緩衝過,那麼,不用再進行請求的處理工作,直接返回緩衝的結果。

7.PostResolveRequestCache:已經完成緩衝的處理工作。

8.PostMapRequestHandler:已經根據使用者的請求,建立了請求的處理器對象。

9.AcquireRequestState:取得請求的狀態,一般用於session

10.PostAcquireRequestState:已經獲得了session

11.PreRequestHandlerExecute:準備執行處理常式。

12.PostRequestHandlerExecute:已經執行了處理常式

13.ReleaseRequestState:釋放請求的狀態。

14.PostReleaseRequestState:已經釋放了請求的狀態。

15.UpdateRequestCache:更新緩衝。

16.PostUpdateRequestCache:已經更新了緩衝。

17.LogRequest:請求的日誌操作

18.PostLogRequest:已經完成請求的日誌操作。

19.EndRequest:本次請求處理完成。

HTTP.SYS

iis6.0與asp.net的運行原理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.