本文是轉載。
上一篇 / 下一篇 2009-08-26 09:41:46 / 個人分類:Python學習
基本概念:
1. 站點程序:在IIS中我們所新建的站點,可以為其配置ASP.net以及應用程序池的版本。
2. 虛擬目錄:用來將不同的文件夾中的內容通過虛擬目錄組織到同一個文件夾中,相當於一個應用程序,也對應着一個應用程序池。
3. 應用程序池:《微軟概念》是將一個或多個應用程序連接到一個或多個工作進程集合的配置。因為應用程序池中的應用程序與其他應用程序被工作進程邊界分隔,所以某個應用程序池中的應用程序不會受到其他應用程序池中的應用程序所產生的問題的影響。
4. 工作進程隔離模式:防止一個應用程序或站點停止了而影響另一個應用程序或站點。應用程序池直接從內核接收請求而非WWW服務。
5. W3WP.exe是IIS的工作進程池,每一個w3wp.exe是IIS的一個web園,一般在IIS6.0中出現,一般的工作進程池只有一個web園,但是如果在工作進程池的web園中最大工作進程數被修改可能出現多個w3wp.exe,或者多個工作進程池同事工作也可能出現多個w3wp.exe。它的啟動用戶是系統內置安全賬戶network service。
6. Web Gargen:指一個應用程序可以再多個進程(w3wp.exe)中來執行,一次請求使用其中的一個。用這個的主要目的是提高程序的可用性。當其中一個進程發生錯誤,那么也不會影響其他進程。發生錯誤的進程可以根據規則關閉,而其他的進程則可以繼續工作。
對於IIS6,IIS7,每個應用程序池都會創建一個w3wp.exe進程。但是並不是所有情況都是一個應用程序池對應一個w3wp.exe進程。web garden。或者一些異常發生的時候,就會一個應用程序池對應多個w3wp.exe進程。應用程序池會在沒有請求的時候定時回收,或者發生錯誤的時候,自動重新建立一個處理進程w3wp.exe進程,如果運氣好,就會看到沒有配置web garden時,一個應用程序池對應多個w3wp.exe進程。
同樣可以對虛擬目錄來設置應用程序池,設置方法和設置站點的應用程序池是一樣的。同樣也可以進行Web Gargen的配置。
在應用程序池的屬性選項卡中,能找到關於IIS對於w3wp進程的監控功能,它提供時間參數設置(隔多少時間來ping一次工作進程),在多少時間內未返回值則將此進程視為timeout,或者死掉的狀態,具體數值可以再IIS手冊中查到相關值,此時我們可以通過使用程序語言讀取系統日志文件來跟蹤到此進程的ID,之后可以使用IISAPP.vbs得到該進程對應的應用程序池,從而可以定位到該程序池所對應的應用程序以及可以通過對應用程序池操作來恢復此故障。
關於HTTP請求的處理(ASP級別)
IIS 6的ASP.net請求處理過程:
IIS5.X是通過Inetlnfo.exe監聽request並把request分發到work process。換句話說,在IIS5.X中對request的監聽和分發是在user mode中進行,在IIS6中,這種工作被移植到kernel mode中進行,所有的這一切都是通過一個新的組件:http.sys來負責。
PS:免用戶應用程序訪問或者修改關鍵的操作系統數據,windows提供了兩種處理器訪問模式:用戶模式(User Mode)和內核模式(kernel mode)。一般地,用戶程序運行在user mode下,而操作系統代碼運行在kernel mode下,kernel mode的代碼允許訪問所有系統內存和所有CPU指令。在user mode下,http.sys接收到一個機遇aspx的http request,然后它會根據IIS中的Metabase查看該基於該request的application屬於哪個application pool,如果該application pool不存在,則創建之,否則直接將request發送到對應的application pool的queue中。每個application pool對應着一個worker processs:w3wp.exe,毫無疑問他是運行在user mode下的。在IIS Metabse中維護着application pool 和 worker process的Mapping,WAS(Web Administrative Service根據這樣一個mapping,將存在於某個application poos queue的request傳遞到對應的worder process(如果沒有,就穿件一個這樣的進程)。在worker process初始化的時候,加載ASP.net ISAPI,asp.net ISAPI進而加載CLR,通過APPManagerAppDomainFactory的Create方法為Application穿件一個Application Domain,通過ISAPIRuntime的ProcessRequest處理Request,進而將流程進入到ASP.net http runtime pipeline。