配置結構
ASP.NET 設定檔稱為Web.config 文件,它們可以出現在ASP.NET 應用程式的多個目錄中。 ASP.NET 設定層次結構具有下列特徵:
使用套用於設定檔所在的目錄及其所有子目錄中的資源的設定檔。
允許您將設定資料放在將使它具有適當範圍(整台電腦、所有的Web 應用程式、單一應用程式或該應用程式中的子目錄)的位置。
允許重寫從配置層次結構中的較高層級繼承的配置設定。還允許鎖定配置設置,以防止它們被較低級別的配置設置所重寫。
將配置設定的邏輯群組組織成節的形式。
設定繼承
所有的.NET Framework 應用程式都從一個名為systemrootMicrosoft .NETFrameworkversionNumberCONFIGMachine.config 的檔案繼承基本組態設定和預設值。 Machine.config 檔案用於伺服器級的組態設定。其中的某些設定不能在位於層次結構中較低層級的設定檔中被重寫。
.NET 用戶端應用程式(控制台和Windows 應用程式)使用名為ApplicationName.config 的設定檔來重寫繼承的設定。 ASP.NET 應用程式使用名為Web.config 的設定檔來重寫繼承的設定。
ASP.NET 設定層次結構的根是一個稱為根Web.config 檔案的文件,它與Machine.config 檔案位於同一個目錄中。根Web.config 檔案繼承Machine.config 檔案中的所有設定。根Web.config 檔案包含套用於所有執行某一特定版本的.NET Framework 的ASP.NET 應用程式的設定。由於每個ASP.NET 應用程式都從根Web.config 檔案繼承預設配置設置,因此只需為重寫預設設定的設定建立Web.config 檔案。
集合元素中的繼承
某些配置元素是集合,例如,namespaces 元素和customErrors 元素。
在集合中,通常透過add 子元素向集合中添加配置設置,透過remove 子元素按鍵名移除配置設置,或者可以透過clear 子元素清除整個集合。除非允許使用重複項,否則,在子設定檔中新增的設定將重寫父設定檔中相同鍵名的設定。
注意
存在於早期版本的.NET Framework 中的某些集合對add 子元素使用不同的元素名稱。例如,customErrors 元素使用error 子元素向集合中新增自訂錯誤。
如果收到針對SubDir1 目錄中不存在的檔案發出的請求,ASP.NET 將開始搜尋設定層次結構,並從最本地的Web.config 檔案(如果存在,可能位於目前目錄中,也可能位於目前目錄的父目錄中)開始。 ASP.NET 將搜尋statusCode 屬性等於「404」的customErrors 的error 元素(ASP.NET 設定架構)元素。一旦ASP.NET 在設定設定中找到404 錯誤,將redirect 屬性中的URL 作為回應傳回。
配置設定的範圍
配置設定具有不同的範圍- 有些具有全域範圍,有些僅對應用程式範圍(根Web.config 檔案或Machine.config 檔案)有效。
配置節的範圍是在Machine.config 檔案中的configSections 的section 元素(常規設定架構)元素的allowDefinition 屬性中為包含在ASP.NET 中的所有節定義的。例如,authentication 元素(ASP.NET 設定架構)元素具有MachineToApplication 元素的allowDefinition 屬性。這意味著,authentication 元素可以在應用程式層級的Machine.config 檔案、根Web.config 檔案和Web.config 檔案中設定。如果它是在子目錄層級設定的,則會引發錯誤。如果沒有為某個節定義allowDefinition 屬性,則預設值為Everywhere。
「元素資訊」表中「可設定的位置」旁邊列出了ASP.NET 配置設定和常規配置設定(ASP.NET) 中每個元素的配置設定範圍。
下表列出了每個檔案在配置層次結構中的層級、每個檔案的名稱以及對每個檔案的重要繼承特徵的說明。
設定等級 | 檔案名稱 | 檔案說明 |
伺服器 | Machine.config | Machine.config檔案包含伺服器上所有Web 應用程式的ASP.NET 架構。此檔案位於配置合併層次結構的頂層。 |
根Web | Web.config | 伺服器的Web.config 檔案與Machine.config 檔案儲存在同一個目錄中,它包含大部分system.web 設定節的預設值。執行時,此檔案是從配置層次結構中的從上往下數第二層合併的。 |
網站 | Web.config | 特定網站的Web.config 檔案包含套用於該網站的設置,並向下繼承到該網站的所有ASP.NET 應用程式和子目錄。 |
ASP.NET應用程式根目錄 | Web.config | 特定ASP.NET 應用程式的Web.config 檔案位於該應用程式的根目錄中,它包含應用於Web 應用程式並向下繼承到其分支中的所有子目錄的設定. |
ASP.NET 應用程式子目錄 | Web.config | 應用程式子目錄的Web.config 檔案包含套用於此子目錄並向下繼承到其分支中的所有子目錄的設定。 |
用戶端應用程式目錄 | ApplicationName.configApplicationName.config | 檔案包含Windows 用戶端應用程式(而非Web 應用程式)的設定。 |
ProcessModel 元素
processModel 元素(ASP.NET 設定架構)元素配置用於伺服器(包含伺服器上的所有ASP.NET 應用程式)的處理模型。因此,processModel 設定只能放在Machine.config 檔案中,而且不能被任何Web.config 檔案中的設定重寫。
processModel 元素的變更將只有在輔助程序重新啟動之後才生效,而不是像其他配置元素那樣在設定變更之後立即生效。
注意
當ASP.NET 以輔助進程隔離模式運行在Internet 資訊服務(IIS) 6.0 中時,將使用IIS 6.0 進程模型,並將忽略Machine.config 檔案的processModel 節中的設定。若要設定進程標識、循環或其他進程模型值,請使用IIS 管理器來設定應用程式的IIS 輔助進程。
執行時間計算配置設定
當伺服器接收對特定Web 資源的請求時,ASP.NET 使用位於所請求URL 的虛擬目錄路徑中的所有設定檔以層次結構計算該資源的組態設定。本機配置設定將重寫父設定檔中的設定。
這些設定計算一次,隨後將快取以供後續請求使用。 ASP.NET 會自動監視檔案的更改,並在該檔案的層次結構內的任何設定檔發生更改時重新計算快取。當伺服器收到對特定URL 的請求時,ASP.NET 將使用快取中的組態設定層次結構來找到所請求的資源。
除非設定節元素中包含restartOnExternalChanges="false" 屬性,或設定設定包含在使用configSource 屬性連結到Web.config 檔案的單獨檔案中,否則當設定發生變更時,應用程式將重新啟動。
單一檔案中配置的多個ASP.NET 資源
當管理大量配置設定或管理ISP 設定中的客戶端網站時,將多個位置的設定儲存在一個Web.config 檔案中可能會非常有用。使用location 元素的path 屬性,可以對儲存在應用程式子目錄中的多個特定的ASP.NET 資源進行設定。
有關如何使用location 元素的信息,請參閱如何:使用位置設定配置特定目錄。
虛擬目錄中的設定和實體目錄中的設定發生衝突
虛擬目錄的組態設定獨立於實體目錄結構,必須小心組織虛擬目錄以防止出現設定問題。例如,您可能有一個具有以下實體目錄結構且名為MyResource.aspx 的ASP.NET 檔案。
C:
Subdir1
Subdir2
MyResource.aspx
另外,您還可能擁有一個位於Subdir1 的設定檔、一個映射到c:Subdir1 的名為Vdir1 的虛擬目錄以及一個映射到c:Subdir1Subdir2 的名為Vdir2 的虛擬目錄。如果用戶端使用URL http://localhost/vdir1/subdir2/MyResource.aspx 存取實體位置為c:Subdir1Subdir2MyResource.aspx 的資源,則該資源將從Vdir1 繼承組態設定。但是,如果用戶端使用URL http://localhost/vdir2/MyResource.aspx 存取相同的資源,則該資源不會從Vdir1 繼承設定。以這種方式建立虛擬目錄可能會導致意外的結果,甚至會導致應用程式失敗。建議您不要嵌套虛擬目錄,如果不得不這樣做的話,請只使用一個Web.config 檔案。
限制ASP.NET 繼承
您可能想要限製配置設定的繼承,以增強應用程式的效能、保持高可靠性並簡化管理。限制功能由allowOverride、lockAttributes、lockAllAttributesExcept、lockAllElementsExcept、lockItem 和lockElements 屬性控制。有關這些屬性的更多信息,請參見msdn。