程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET在IIS下的工作模式和原理

ASP.NET在IIS下的工作模式和原理

編輯:關於ASP.NET

ASP.NET與IIS是緊密聯系的,由於IIS6.0與IIS7.0的工作方式的不同,導致ASP.NET的工作原理也發生了相應的變化。

IIS6(IIS7的經典模式)與IIS7的集成模式的不同

IIS6的運行過程:

分析上圖可知:

在 User Mode 下,http.sys 接收到 http request,然後它會根據 IIS 中的 Metabase 查看基於該 Request 的 Application 屬於哪個 Application Pool, 如果該 Application Pool 不存在,則創建之。否則直接將 request 發到對應 Application Pool 的 Queue中。每個 Application Pool 對應著一個 Worker Process — w3wp.exe,(運行在 User Mode 下)。

在 IIS Metabase 中維護著 Application Pool 和 Worker Process 的Mapping。WAS(Web Administrative Service)根據這樣一個 mapping,將存在於某個 Application Pool Queue 的 request 傳遞到對應的 Worker Process (如果沒有,就創建這樣一個進程)。在 Worker Process 初始化的時候,加載 ASP.NET ISAPI,ASP.NET ISAPI 進而加載 CLR。最後通過 AppManagerAppDomainFactory 的 Create 方法為 Application 創建一個 Application Domain;通過 ISAPIRuntime 的  ProcessRequest 處理 Request,進而將流程進入到 ASP.NET Http Runtime Pipeline。

幾個知識點:

HTTP.SYS:(Kernel)的一個組件,它負責偵聽(Listen)來自於外部的HTTP請求,根據請求的URL將其轉發給相應的應用程序池 (Application Pool)。當此HTTP請求處理完成時,它又負責將處理結果發送出去.為了提供更好的性能,HTTP.SYS內部建立了一個緩沖區,將最近的HTTP請求處理結果保存起來。

Application Pool:  IIS總會保持一個單獨的工作進程:應用程序池。所有的處理都發生在這個進程裡,包括ISAPI dll的執行。對於IIS6而言,應用程序池是一個重大的改進,因為它們允許以更小的粒度控制一個指定進程的執行。你可以為每一個虛擬目錄或者整個Web 站點配置應用程序池,這可以使你很容易的把每一個應用程序隔離到各自的進程裡,這樣就可以把它與運行在同一台機器上其他程序完全隔離。從Web處理的角度看,如果一個進程死掉,至少它不會影響到其它的進程。
當應用程序池接收到HTTP請求後,交由在此應用程序池中運行的工作者進程Worker Process: w3wp.exe來處理此HTTP請求。

Worker Process: 當工作者進程接收到請求後,首先根據後綴找到並加載對應的ISAPI擴展 (如:aspx 對應的映射是aspnet_isapi.dll),工作者進程加載完aspnet_isapi.dll後,由aspnet_isapi.dll負責加載 ASP.NET應用程序的運行環境即CLR (.NET Runtime)。        
Worker Process運行在非托管環境,而.NET中的對象則運行在托管環境之上(CLR),它們之間的橋梁就是ISAPI擴展。

WAS(Web Admin Service):這是一個監控程序,它一方面可以存取放在InetInfo元數據庫(Metabase)中的各種信息,另一方面也負責監控應用程序池(Application Pool)中的工作者進程的工作狀態況,必要時它會關閉一個老的工作者進程並創建一個新的取而代之。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved