IIS7 0 託管管道模式解析

2021-08-25 17:53:59 字數 3326 閱讀 2872

iis 改善和發展的主要因素是iis已經成為應用程式(特別是asp.net)的支援平台。通過將asp.net直接整合到 iis 7.0 中,iis 7.0進一步推動了平台的發展。從管理功能到身份驗證,乃至請求處理管道本身,相關功能都已經整合到iis 7.0之中。

將管道整合到iis 7.0中具有兩個好處:一是為基於asp.net的web應用程式及iis 7.0擴充套件提供了更好的效能,二是通過使用託管**獲得了更好的控制能力。

iis 7.0可以支援兩種管道模式:一種是iis 7.0最新提供的整合管道模式,另一種是經典管道模式,這種模式是由先前版本的iis提供的。我們可以在應用程式池級設定管道模式,這項功能對iis管理員尤其有用,因為這樣既可以令一台伺服器僅執行一種模式,也可以令兩種模式同時執行於一台伺服器上。

asp.net的效能之所以能夠得到改善,是因為asp.net應用程式不再需要退出管道並載入isapi程序來處理asp.net**,然後再返 回到管道為客戶提供響應資訊。為了保持應用程式的相容性,iis 7.0仍然支援經典管道模式,但是,現在應該盡可能地使用新的整合管道

1. 經典模式

在iis 6.0中,asp.net扮演了乙個isapi過濾器的角色,也就是說,請求退出管道後,由aspnet.dll進行處理,然後返回到管道進行進一步處 理,最終將響應返回給客戶端。在iis 6.0中,乙個客戶端的http請求將沿著管道移動,直到確定了乙個處理程式,如果這個檔案是乙個asp.net檔案,那麼它就轉入asp.net isapi過濾器,通過isapi的處理,在將乙個http響應返回給客戶端之前,這個請求還將返回管道。iis 7.0繼續提供了這種模式,稱為經典模式。

在iis 6.0中的經典模式中,asp.net是乙個新增到iis中的isapi。iis 7.0之所以支援這種模式,是為了做到向後相容。但是,經典模式缺少許多整合模式才能提供的特性。在經典模式中,iis擁有自身的管道,這些管道可以通過建立乙個isapi擴充套件進行擴充,而isapi擴充套件是以難以開發而著稱的。asp.net作為乙個isapi擴充套件執行,只是iis管道中的一項組成部分。

下圖很好地解釋了上述情況。注意,在這種情況下,asp.net似乎是一種類似於馬後炮的成果,僅當iis處理isapi擴充套件時才能夠發揮作用。

利用副檔名,可以判斷使用哪個isapi處理程式。例如,可以將擴充套件名為.aspx 和.ascx的檔案對映到aspnet_isapi.dll;並且將擴充套件名為.asp的檔案對映到asp.dll,這樣就可以處理傳統的asp頁面;此外,將擴充套件名為.php的檔案對映到php.dll,這樣就可以處理php頁面,前提是已經安裝了php.dll。

此外,在iis 6.0和iis 7.0的經典模式中,某些特性是重複的。例如,錯誤處理就是一種重複的特性,因為iis可以處理非asp.net頁面,而asp.net可以處理所有將處理程式對映為aspnet_isapi.dll的頁面。

在iis 6.0中,我們可以將所有檔案型別都對映到asp.net,但是這樣做存在一些限制。最大的限制就是如何處理預設文件:乙個預設文件僅當在global.asax中或者在乙個http模組中被指定為預設文件時,這個預設文件才能夠得到處理。某些自定義的配置需要使用aspnet_isapi.dll處理所有的檔案型別。iis 7.0可以輕易地解決這個問題。

經典模式可以在無須修改web.config的前提下執行現有的web**,因此,如果使用的web farm中既包括iis 6.0伺服器,也包括iis 7.0伺服器,或者因為某些原因無法將web.config檔案轉換為遵循新語法的web.config檔案,那麼就可以使用經典模式。

2. 整合管道模式

利用iis 7.0中的整合管道,開發人員可以將自己的託管**在管道中集成為乙個模組。在先前版本的iis中,這需要開發isapi過濾器或應用程式,對多數開發人 員而言,這是一項難度很高的工作。在iis 7.0中,可以用託管**開發模組,並且模組可以作為請求管道的組成部分。利用iis 7.0的整合管道模式,可以在管道中處理asp.net檔案,這樣可以在處理過程的任意乙個步驟使用asp.net**。因為asp.net已經整合到管 道中,所以,諸如身份驗證之類的asp.net功能也可以用於處理非asp.net內容。每個請求都可以由iis和asp.net進行處理,而不必考慮其 所屬型別。

與asp.net整合也意味著可以使用asp.net身份驗證對任何檔案、資料夾,以及iis 7.0的功能,從而有效地進行訪問控制。在iis 7.0出現之前,因為asp.net需要退出管道才能完成處理工作,所以任何不是由asp.net處理的檔案,如html、perl,甚至圖形影象等內 容,都無法由asp.net進行處理,因此也不會由asp.net身份驗證機制來進行訪問控制。所以,就必須使用windows整合的身份驗證或自定義的 身份驗證機制對不是由asp.net處理的檔案進行訪問控制。利用整合管道,可以大大簡化身份驗證方法的開發工作,可以將asp.net作為iis的有機組成部分。現在,iis伺服器的功能被劃分為40多個模組,因此也就將iis和asp.net的功能劃分為不同的組成部分。諸如staticfilemodule、basicauthenticationmodule、formsauthentication、session、profile,以及rolemanager等模組都是iis管道的組成部分。注意,formsauthentication、session、profile,以及rolemanager原本就是asp.net的組成部分,與iis並無關係。

下圖使用模組解釋了iis管道。這些模組原本是asp.net的組成部分,現在已經是iis管道的有機組成部分。

3. 兩種模式之間配置的區別

在整合模式中,http模組和http處理程式不再定義於中,而是定義於中。如果在整合模式中執行乙個包括了http模組或http處理程式的web.config檔案,那麼將會發生失效。幸運的是,微軟公司已經詳細規定了乙個編號為500.22的錯誤資訊,這個錯誤資訊說明了如何一步步地遷移web.config檔案(參見下圖)。

注意,web.config檔案中仍然保留了httpmodules節,其目的在於向後相容,但是,在system.webserver中,modules節則處於優先的地位。validateintegratedmode configuration屬性可以確保iis不會因為存在遺留的節而產生問題。

整合管道模式是預設的管道模式,具有一些比較重要的優勢。我們需要做的就是遷移定義了http處理程式和http模組的所有web.config檔案,從而確保其能夠在iis 7.0下正常工作。

IIS 7 0 確定託管管道模式

iis7.0可以支援兩種管道模式 一種是 iis 7.0最新提供的整合管道模式,另一種是經典管道模式,這種模式是由先前版本的 iis 提供的。我們可以在應用程式池級設定管道模式,這項功能對 iis 管理員尤其有用,因為這樣既可以令一台伺服器僅執行一種模式,也可以令兩種模式同時執行於一台伺服器上 經典...

IIS 之 託管管道模式

iis 7.0 支援兩種管道模式 1 iis 7.0 最新提供的整合管道模式 integrated 2 經典管道模式 classic 經典管道模式是由先前版本的iis提供的。我們可以通過應用程式池設定管道模式,這項功能對iis管理員尤其有用,因為這樣既可以令一台伺服器僅執行一種模式,也可以令兩種模式...

IIS6 0和IIS7 0解析漏洞

目錄iis7.0 7.5解析漏洞 參考環境搭建 目錄解析漏洞 在iis6.0中,目錄中以 asp命名的資料夾下的檔案將會被以asp格式解析 我們先建立乙個txt檔案,新增helloworld內容,隨後將其更改為.jpg格式 在 目錄下訪問1.jpg檔案,該檔案是以jpg檔案解析 訪問以 asp命名的...