IIS 7 託管管道模式 傳統模式 整合模式 區別 區分

來源:互聯網
上載者:User

IIS 7.0 支援兩種管道模式:一種是IIS 7.0最新提供的整合式管線模式,另一種是經典管道模式,經典管道模式是由先前版本的IIS提供的。

我們可以通過應用程式集區設定管道模式,這項功能對IIS管理員尤其有用,因為這樣既可以令一台伺服器僅運行一種模式,也可以令兩種模式同時運行於一台伺服器上。

上述兩種管道模式使用的web.config檔案存在重大的區別,許多在經典管道模式下能夠正常工作的web.config檔案都無法在整合式管線模式下正常工作。利用AppCmd.exe,我們可以將經典管道模式下的設定檔格式自動轉換為整合式管線模式下的設定檔格式。

我們有必要首先看看各種模式的結構,並且研究兩種模式之間的區別。

1. 傳統模式

在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. 整合模式

利用整合模式,可以將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管道的有機組成部分。
 

IIS管道提供了二十多種事件,開發人員可以利用這些事件來擴充Web伺服器的功能。實際上,通過建立定製模組,同時更新applicationHost.config,可以僅使用自訂模組,而無須再使用微軟公司提供的內建模組,我們可以將IIS 7.0中的模組替換為自訂的模組。

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

IIS 7.0對設定檔進行了一些修改,Web開發人員可以使用這些修改內容。例如,<system.webServer>節就是這樣一項修改,無論是傳統模式還是整合模式都可以識別<system.webServer>節,同時,<system.webServer>節既可以在applicationHost.config檔案中設定,也可以在web.config檔案中設定。<system.webServer>節既可以控制靜態頁面,也可以控制動態網頁面。即使在傳統模式中,<system.webServer>節也具有重要作用,它可以協助Web開發人員在web.config檔案中設定不同的IIS配置。

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

IIS 7.5 中配置 <system.webServer> 節點

問題

在 IIS7.5 中配置 <customError><error> 節點的404頁面不起作用

分析

<system.web>節點是iis7.0之前版本的主要配置節點,在II7.0以後IIS管道處理與ASP.NET管道處理進行了整合,提高了ASP.NET的處理效能。由於程式運行在IIS7.5整合模式下,需要在<system.webServer>節點中配置,新增加的<system.webServer>節點中需要進行哪些修改以程式在IIS7的整合模式下能完全生效呢,主要包含以下幾個方面:

(1) <modules> ----- 相當於<system.web>中的<httpModules>

(2) <handlers> ----- 相當於<system.web>中的<httpHandlers>

(3) <customError>下的<error> ----- 相當於<system.web>中的<httpErrors>

以上三點中,如果你的程式中有自訂的httpModules或者httpHandlers的話,那麼第一點和第二點非常重要,具體資料請MSDN。

配置

<httpErrors errorMode="DetailedLocalOnly">
<remove statusCode="404" />
<error statusCode="404" path="/404.htm" responseMode="ExecuteURL" />
</httpErrors>

補充

errorMode有三個值,分別為Custom、DetailedLocalOnly、Detailed,意思為對使用者與伺服器端始終顯示自訂頁面、只能伺服器端顯示詳細出錯資訊、對使用者與伺服器端始終顯示詳細出錯資訊。

responseMode有File、ExecuteUrl、Redirect三個層,分別表示使用伺服器端靜態檔案、可執行檔URL、URL轉向。

注意:<httpErrors>與<customErrors>是不同的,前者主要用於處理http相關的錯誤資訊,而後者主要是處理應用程式級的錯誤頁轉向。

<customErrors>

同樣,如果Application_Error和<customerErrors>同時存在,也存在執行順序的問題。因為優先順序Application_Error事件> <customErrors>配置項,所以發生應用程式級錯誤時,優先執行Application_Error事件中的代碼,如果Application_Error事件中調用了Server.ClearError()函數,<customerErrors>配置節中的defaultRedirect不起作用,因為Exception已經被清除;如果Application_Error事件中沒用調用了Server.ClearError()函數,錯誤頁會重新置放到defaultRedict指定的URL頁面,為使用者顯示友好出錯資訊。

通過對.NET提供的以上四種錯誤處理機制的分析,我們可以把它們從不同的角度分類,便於我們理解和使用。

1、從功能上分類:用於異常處理(Handling exceptions)是Page_Error事件和Application_Error事件;使用者錯誤頁面重新導向(Redirecting the user to an error page)的是 ErrorPage屬性 和 <customErrors>配置項。

2、從錯誤處理的範圍分類:用於頁面級(Page level)錯誤處理的是Page_Error事件 和 ErrorPage屬性;用於應用程式級(Application level)錯誤處理的是Application_Error事件 和 <customErrors>配置項。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.