使用 ASP.NET 配置类
使用 Configuration 類可以完成大部分的配置工作。該類用于對(duì)計(jì)算機(jī)、.NET 客戶應(yīng)用程序、ASP.NET 應(yīng)用程序、Web 目錄、以及保存在 Web 目錄中的資源配置進(jìn)行展示,
在 ASP.NET 2.0 中,你可以通過使用 WebConfigurationManager 對(duì)象的方法獲取配置段并對(duì) Configuration 類實(shí)例進(jìn)行訪問。在 .NET Framework 客戶應(yīng)用程序中,你可以使用類似的 ConfigurationManager 對(duì)象。
下面的內(nèi)容對(duì)不同情況下的配置類使用方式進(jìn)行描述。
下例所有實(shí)例都需要首先使用非靜態(tài)的 System.Configuration.Configuration.GetSection(System.String) 方法和 System.Configuration.Configuration.GetSectionGroup(System.String) 方法創(chuàng)建 System.Configuration.Configuration 類實(shí)例。這樣允許你從任何應(yīng)用程序中獲取配置信息。如果你在獲取當(dāng)前應(yīng)用程序的配置信息時(shí),請(qǐng)使用靜態(tài)方法 GetSection,以獲得更快的處理速度。
打開被映射在全局配置設(shè)定中的配置對(duì)象
要打開全局配置文件,你的應(yīng)用程序應(yīng)該調(diào)用 WebConfigurationManager 類的靜態(tài)方法 OpenMachineConfiguration。在接下來的代碼實(shí)例中,OpenMachineConfiguration 方法打開并返回與 .NET Framework 2.0 的 Machine.config 文件相匹配的配置對(duì)象。該方法被重載后的其他版本則允許你對(duì)位置、遠(yuǎn)程服務(wù)器、以及用戶信息進(jìn)行指定。
// 獲取本地計(jì)算機(jī)的機(jī)器配置設(shè)定 System.Configuration.Configuration machineConfig = System.Web.Configuration.WebConfigurationManager.OpenMachineConfiguration(); machineConfig.SaveAs("c:\\machineConfig.xml");配置 API 通常是與版本相關(guān)的。所以,不可以使用該方法打開其他版本 .NET Framework 中的 Machine.config 文件。
必需的特權(quán)
要打開機(jī)器配置文件,應(yīng)用程序需要擁有物理 Machine.config 文件的讀取權(quán)限。要對(duì)機(jī)器配置進(jìn)行更改,應(yīng)用程序需要擁有該文件的寫入權(quán)限,以及創(chuàng)建 .NET Framework 配置目錄的特權(quán)。
打開被映射在 Web 應(yīng)用程序配置中的配置對(duì)象
要打開 Web 應(yīng)用程序的配置文件,你的應(yīng)用程序需要調(diào)用 WebConfigurationManager 類的靜態(tài)方法 OpenWebConfiguration,并把要打開的 Internet 信息服務(wù)(IIS)管理器虛擬目錄的相關(guān)路徑作為參數(shù)傳遞。
path 參數(shù)的值可以從包含被請(qǐng)求配置的 IIS 元數(shù)據(jù)庫路徑中獲取。例如,如果 IIS 元數(shù)據(jù)庫路徑是 W3SVC1/ROOT/Temp,因?yàn)槟J(rèn)網(wǎng)站是 1,那么 path 的值就應(yīng)該就是 /Temp。
在下例代碼實(shí)例中,OpenWebConfiguration 方法打開并返回與默認(rèn)網(wǎng)站的 Temp 應(yīng)用程序相對(duì)應(yīng)的配置對(duì)象。該配置對(duì)象包括本地 Web.config 文件中指定的配置設(shè)定以及所有繼承自父配置文件的設(shè)定,一直追溯到 Machine.config 文件。該方法被重載的其他版本允許你對(duì)網(wǎng)站、位置、遠(yuǎn)程服務(wù)器、以及用戶信息進(jìn)行指定。
// 獲取 Web 應(yīng)用程序的配置設(shè)定。 System.Configuration.Configuration webConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Temp"); webConfig.SaveAs("c:\\webConfig.xml");甚至在物理 Web.config 文件不存在的時(shí)候也能夠打開 System.Configuration.Configuration 對(duì)象。這種情況下被返回的配置由繼承自配置文件層次中的全部設(shè)定而組成。
必需的特權(quán)
要打開 Web 配置文件,應(yīng)用程序需要擁有物理 Web.config 文件以及配置層次中的所有父文件的讀取權(quán)限。
打開被映射到配置段中的配置對(duì)象
要從配置段中獲取配置信息,你的應(yīng)用程序需要調(diào)用 Configuration 類的非靜態(tài)方法 GetSectionGroup,并傳遞配置段名參數(shù)。至于包含在配置段分組中的配置段,你既可以為配置段(System.web/anonymouseIdentification)使用 XPath,也可以獲取第一個(gè)被映射到配置段分組的配置對(duì)象。
下例代碼實(shí)例中,OpenWebConfiguration 方法打開并返回默認(rèn)網(wǎng)站的 Web 應(yīng)用程序(Temp)配置對(duì)象,然后使用該對(duì)象獲取 system.web 配置段分組的引用,該對(duì)象同樣也可以被用于獲取 anonymouseIdentification 配置段的引用。
// 獲取 <anonymouseIdentification> 配置段中的配置設(shè)定。 System.Configuration.Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Temp"); System.Web.Configuration.SystemWebSectionGroup systemWeb = config.GetSectionGroup("system.web") as System.Web.Configuration.SystemWebSectionGroup; System.Web.Configuration.AnonymousIdentificationSection sectionConfig = systemWeb.AnonymousIdentification; if (null != sectionConfig) {StringBuilder sb = new StringBuilder();sb.Append("<anonymousIdentification> attributes:\r\n");System.Configuration.PropertyInformationCollection props = sectionConfig.ElementInformation.Properties;foreach (System.Configuration.PropertyInformation prop in props){sb.AppendFormat("{0} = {1}\r\n", prop.Name.ToString(), prop.Value.ToString());}Console.WriteLine(sb.ToString()); }甚至在物理 Web.config 文件不存在的時(shí)候也能夠打開 System.Configuration.Configuration 對(duì)象。這種情況下被返回的配置由繼承自配置文件層次中的全部設(shè)定而組成。
必需的權(quán)限
要打開某個(gè) Web 配置文件的配置段,應(yīng)用程序需要擁有物理 Web.config 文件以及所有父文件的讀取權(quán)限。被托管代碼應(yīng)用程序還需要相應(yīng)的權(quán)限以對(duì)系統(tǒng)配置段進(jìn)行讀取。完全可信度和高可信度的應(yīng)用程序在默認(rèn)時(shí)已經(jīng)擁有這些權(quán)限。換句話說,默認(rèn)時(shí),中可信度和低可信度應(yīng)用程序?qū)o法對(duì)配置段進(jìn)行讀取。
打開被映射到遠(yuǎn)程配置設(shè)定中的配置對(duì)象
你可以使用配置 API 打開遠(yuǎn)程計(jì)算機(jī)上的配置。配置 API 可以打開另一臺(tái)計(jì)算機(jī)中的機(jī)器配置文件,以及任何 IIS 應(yīng)用程序或子目錄中的應(yīng)用程序配置文件。
要打開另一臺(tái)電腦的機(jī)器配置文件,應(yīng)用程序需要調(diào)用靜態(tài)方法 OpenMachineConfiguration,并把服務(wù)器名稱作為參數(shù)傳遞給該方法。
要打開另一臺(tái)電腦的 Web.config 文件,應(yīng)用程序需要調(diào)用靜態(tài)方法 OpenWebConfiguration,并把網(wǎng)站相對(duì)路徑、網(wǎng)站標(biāo)識(shí)符、和服務(wù)器名稱一并傳遞給配置對(duì)象。被返回的配置對(duì)象中包括了本地 Web.config 文件設(shè)定和所有父配置文件中的被繼承設(shè)定,一直追溯到 Machine.config 文件。
服務(wù)器名稱是有效的 Windows 網(wǎng)絡(luò)計(jì)算機(jī)名稱。這些名稱并沒有被 ASP.NET 處理,而是直接傳遞給操作系統(tǒng)。
下例代碼實(shí)例說明了如何打開默認(rèn)網(wǎng)站根配置中的機(jī)器配置,以及應(yīng)用程序目錄中的 Web 配置。
IntPtr userToken = System.Security.Principal.WindowsIdentity.GetCurrent().Token;// 獲取遠(yuǎn)程計(jì)算機(jī)的機(jī)器配置設(shè)定。 System.Configuration.Configuration remoteMachineConfig = System.Web.Configuration.WebConfigurationManager.OpenMachineConfiguration(null, "ServerName", userToken); remoteMachineConfig.SaveAs("c:\\remoteMachineConfig.xml");// 獲取遠(yuǎn)程計(jì)算機(jī)的根網(wǎng)站配置。 System.Configuration.Configuration remoteRootConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null, null, null, "ServerName", userToken); remoteRootConfig.SaveAs("c:\\remoteRootConfig.xml");// 獲取遠(yuǎn)程計(jì)算機(jī)目錄 W3SVC/1/Root/Temp 的應(yīng)用程序配置設(shè)定 System.Configuration.Configuration remoteWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Temp", "1", null, "ServerName", userToken); remoteWebConfig.SaveAs("c:\\remoteWebConfig.xml");必需的特權(quán)
要打開遠(yuǎn)程計(jì)算機(jī)上的配置文件,應(yīng)用程序必須擁有遠(yuǎn)程計(jì)算機(jī)上的管理員特權(quán)。這個(gè)需求比在本地使用時(shí)要受到更多的限制。至于本地配置文件,應(yīng)用程序只需要擁有配置文件和 IIS 元數(shù)據(jù)庫(用于解析 IIS 路徑)的讀取權(quán)限就可以了。
請(qǐng)?jiān)趪L試進(jìn)行配置之前使用“-config+”參數(shù)運(yùn)行遠(yuǎn)程計(jì)算機(jī)上的 Aspnet_regiis.exe 工具。
更新配置設(shè)定
要對(duì)已打開的配置對(duì)象進(jìn)行更新,應(yīng)用程序需要調(diào)用 Configuration 對(duì)象的 Save 方法或者 SaveAs 方法。這些方法為該對(duì)象對(duì)任何配置設(shè)定所做的更改進(jìn)行寫入。如果配置文件尚不存在,將會(huì)自動(dòng)創(chuàng)建一個(gè)全新的配置文件。
下例代碼實(shí)例把 compilation 配置段的 debug 參數(shù)設(shè)置成 true。
// 更新 Web 應(yīng)用程序配置設(shè)定。 System.Configuration.Configuration updateWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Temp"); System.Web.Configuration.CompilationSection compilation = updateWebConfig.GetSection("system.web/compilation") as System.Web.Configuration.CompilationSection; Console.WriteLine("Current <compilation> debug = {0}", compilation.Debug); compilation.Debug = true; if (!compilation.SectionInformation.IsLocked) {updateWebConfig.Save();Console.WriteLine("New <compilation> debug = {0}", compilation.Debug); } else {Console.WriteLine("Could not save configuration."); }現(xiàn)在,在更新配置數(shù)據(jù)的時(shí)候不存在任何有效的鎖定功能。因此,配置 API 會(huì)使用一個(gè)優(yōu)化的合作模型對(duì)配置進(jìn)行更改。在優(yōu)化的合作模型之下,如果兩個(gè)應(yīng)用程序同時(shí)打開相同的配置,它們將會(huì)得到配置對(duì)象的唯一配置。如果某個(gè)應(yīng)用程序嘗調(diào)用 Save 或 SaveAs 方法對(duì)配置文件進(jìn)行更改,并且實(shí)際的配置文件在應(yīng)用程序已經(jīng)在獲取配置對(duì)象之后更新了配置,那么該方法就會(huì)引起一個(gè)異常。實(shí)際文件可能在另一個(gè)應(yīng)用程序更新配置或者對(duì)依賴于文件的配置 API 進(jìn)行更改的時(shí)候就已經(jīng)被更改。
必需的特權(quán)
要更改 Web 配置,應(yīng)用程序需要擁有文件的寫入權(quán)限,還要擁有包含該文件的目錄的創(chuàng)建特權(quán)。
轉(zhuǎn)載于:https://www.cnblogs.com/Laeb/archive/2006/12/21/599474.html
總結(jié)
以上是生活随笔為你收集整理的使用 ASP.NET 配置类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “影响100活动”答记者问(二)
- 下一篇: [转自天涯]很多年以前,我是一个中锋