配置結構
ASP.NET 配置文件稱為 Web.config 文件,它們可以出現在 ASP.NET 應用程序的多個目錄中。ASP.NET 配置層次結構具有下列特征:
使用應用于配置文件所在的目錄及其所有子目錄中的資源的配置文件。
允許您將配置數據放在將使它具有適當范圍(整臺計算機、所有的 Web 應用程序、單個應用程序或該應用程序中的子目錄)的位置。
允許重寫從配置層次結構中的較高級別繼承的配置設置。還允許鎖定配置設置,以防止它們被較低級別的配置設置所重寫。
將配置設置的邏輯組組織成節的形式。
配置繼承
所有的 .NET Framework 應用程序都從一個名為 systemroot/Microsoft .NET/Framework/versionNumber/CONFIG/Machine.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:/Subdir1/Subdir2 的名為 Vdir2 的虛擬目錄。如果客戶端使用 URL http://localhost/vdir1/subdir2/MyResource.aspx 訪問物理位置為 c:/Subdir1/Subdir2/MyResource.aspx 的資源,則該資源將從 Vdir1 繼承配置設置。但是,如果客戶端使用 URL http://localhost/vdir2/MyResource.aspx 訪問同樣的資源,則該資源不從 Vdir1 繼承設置。以這種方式創建虛擬目錄可能會導致意外的結果,甚至會導致應用程序失敗。建議您不要嵌套虛擬目錄,如果不得不這樣做的話,請只使用一個 Web.config 文件。
限制 ASP.NET 繼承
您可能希望限制配置設置的繼承,以增強應用程序的性能、保持高可靠性并簡化管理。限制功能由 allowOverride、lockAttributes、lockAllAttributesExcept、lockAllElementsExcept、lockItem 和 lockElements 屬性控制。有關這些屬性的更多信息,請參見msdn。
新聞熱點
疑難解答