您好,登錄后才能下訂單哦!
這篇文章主要講解了“IIS ASP.NET的進(jìn)程模式是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“IIS ASP.NET的進(jìn)程模式是什么”吧!
IIS ASP.NET的進(jìn)程模式之ASP.NET處理模型
到目前為止,我們已經(jīng)明白當(dāng)請求一個ASP.NET文件的請求傳到IIS后,他被轉(zhuǎn)遞到aspnet_isapi.dll,他是ASP.NET相關(guān)處理的主要入口點。實際上,這個擴(kuò)展明顯依賴于系統(tǒng)上IIS的版本,因此處理模型是通過asp.net運行時通過有序的操作執(zhí)行來處理請求并生成回送,也許有那么一點改變。
在IIS5.X,所有asp.net相關(guān)請求通過ISAPI擴(kuò)展被分配到外部工作進(jìn)程叫做aspnet_wp.exe.ISAPI擴(kuò)展,在IIS進(jìn)程(inetinfo.exe)中運行,再傳遞控制權(quán)連同所有關(guān)于當(dāng)前傳入請求的信息到aspnet_wp.exe。2個進(jìn)程間的通信通過命名管道(眾所周知IPC[內(nèi)部進(jìn)程通信]機(jī)制建立。ASP.NET工作進(jìn)程執(zhí)行ISAPI擴(kuò)展的大部分任務(wù)。注意一下每個WEB應(yīng)用程序的實質(zhì),以及與IIS下不同虛擬目錄的通訊,他們在asp.net工作進(jìn)程同一個進(jìn)程的上下文中被執(zhí)行。為了實現(xiàn)讀取各自執(zhí)行中上下文ASP.net引入了應(yīng)用程序域的概念,縮寫AppDomains.他們可以被認(rèn)為是一個輕量級的進(jìn)程。更多的將在后面介紹。
如果運行在IIS6上,aspnet_wp.exe進(jìn)程沒有被使用,選擇一個更優(yōu)的進(jìn)程叫做w3wp.exe.同時,inetinfo.exe也不再用來傳遞HTTP請求到ISAPI擴(kuò)展,盡管這樣他還是保持為其他協(xié)議的請求提供服務(wù)。雖然IIS6能夠運行在兼容模式下并且模擬之前的行為,但是相對于先前的IIS5處理模型有了很多的變化。相對早期***改變,當(dāng)處理模型運行在IIS5上,傳入進(jìn)來的請求以lower-kernel-level形式然后傳遞到正確的ISAPI擴(kuò)展,從而避免在內(nèi)部信息處理方面花費過多的操作。在下面的段落中,我們將進(jìn)行更深入的研究。
IIS ASP.NET的進(jìn)程模式之IIS5.0 處理模型
在windows2000以及XP系統(tǒng)上這是默認(rèn)的處理模型。如上所說他有IIS inetinfo.exe進(jìn)程默認(rèn)在TCP端口80監(jiān)聽傳入的HTTP請求并且把他們推送進(jìn)隊列等待處理。如果請求類型是asp.net,處理將委托給asp.net isapi擴(kuò)展 aspnet_isapi.dll.這樣輪流通過命名管道與ASP.NET工作進(jìn)程通信,最終工作進(jìn)程處理并傳遞請求到asp.net HTTP運行時環(huán)境。圖表2將具體描敘這個過程。
圖表2:IIS5.0處理模型
圖表2顯示一個我們尚未提到過的元素—ASP.NET HTTP運行時環(huán)境。目前他并不是我們這編文章的主題,他將在接下來的文章中被解析。HTTP運行時可以被看作一個黑色盒子,所有ASP.NET指定處理在這里發(fā)生,所有的受管制代碼運行場所,從HTTP運行時一直到httphandler最終處理請求并生成回送都在這里被處理。這里還涉及到ASP.NET管道或HTTP運行時管道。
就這個模型有一個有趣的地方就是所有請求,一旦被ISAPI擴(kuò)展處理,就被傳遞到asp.net工作進(jìn)程。每次活動時間有且僅有一個進(jìn)行實例,一個例外,后面討論。因此所運行在IIS上的asp.net web應(yīng)用程序?qū)嶋H上也運行在工作進(jìn)程上。盡管如此,這并不意味著所有應(yīng)用運行在同一個上下文上并共享他們所有的數(shù)據(jù)。值得一提,asp.net引入APPDomain概念,本質(zhì)上是一種提供獨立和安全邊界的受管制輕量級進(jìn)程。每個IIS虛擬目錄在一個APPDomain里執(zhí)行,他將自動加載到工作進(jìn)程只要資源是屬于***次請求的應(yīng)用程序。一旦appdomain被加載,換句話說,當(dāng)前請求所有需要的程序集被加載到appdomain–實際上是傳遞到asp.net管道處理。若干appdomains能夠這樣運行在同樣的進(jìn)程中,當(dāng)多個請求對于同樣的appdomain能夠在多個線程出來。盡管如此,一個線程并不屬于一個appdomain,他能為多個不同的appdomians處理多個請求,但是同一個給定的時間一個線程屬于一個APPdomain.
處于性能目的,工作線程能夠根據(jù)一些標(biāo)準(zhǔn)(通過MACHINCE.CONFIG文件配置)被回收。這些標(biāo)準(zhǔn)包括進(jìn)程生命周期,請求以及隊列數(shù)量,空閑時間,內(nèi)存分配。一旦達(dá)到這些參數(shù)中一項臨界值,ISAPI擴(kuò)展將生成一個新的工作進(jìn)程實例用來處理請求。實際上,先前的進(jìn)程實例并沒有被關(guān)閉,但是他被終止服務(wù)等待的請求。
IIS ASP.NET的進(jìn)程模式之IIS6.0處理模型
IIS6是WINDOWS2003系統(tǒng)默認(rèn)的。在IIS5處理模型的上他有幾個改變和改進(jìn)。其中之一***改變就是應(yīng)用程序池概念。在IIS5系列應(yīng)用程序上,即所有的appDomains—運行在asp.net工作進(jìn)程上。為了在安全以及特性上完成一個出色的界定,IIS6處理模型允許應(yīng)用程序運行在同一個工作進(jìn)程的不同拷貝上。每個應(yīng)用程序池能夠包含多個appdomains(運行在單獨一個工作進(jìn)程拷貝上).換而言之,這個變化是從單一進(jìn)程運行所有程序到多個進(jìn)程運行每一個應(yīng)用池。這個模型也叫做工作過程隔離模式。
例外一個大變化相對先前的模型在IIS監(jiān)聽所有傳入數(shù)據(jù)方面。在IIS5里,由IIS進(jìn)程,inetinfo.exe監(jiān)聽指定的TCP端口。在IIS6中,傳入請求被處理并隊列在核心級別來替換先前通過核心驅(qū)動調(diào)用http.sys的用戶模式;這種方法有幾個優(yōu)勢相對于先前的模式被叫作 kernel-level 請求隊列。
圖表3 IIS6處理模型
圖表3主要由請求處理組成。一旦一個請求到達(dá)核心級別設(shè)備驅(qū)動http.sys,然后發(fā)送到相應(yīng)的應(yīng)用程序池隊列,每個隊列屬于一個指定的應(yīng)用程序池。
工作進(jìn)程負(fù)責(zé)加載asp.net ISAPI擴(kuò)展,依次加載 CRL 委派所有工作到HTTP運行時。
W3WP.exe進(jìn)程與IIS5下面的aspnet_wp.exe不同,他不是asp.net特有的,能夠用來處理任何類型的請求。什么樣的ISAPI模塊被加載類型根據(jù)需要的服務(wù)資源類型。
感謝各位的閱讀,以上就是“IIS ASP.NET的進(jìn)程模式是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對IIS ASP.NET的進(jìn)程模式是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。