使用 Configuration 类可以完成大部分的配置工作。该类用于对计算机、.NET 客户应用程序、ASP.NET 应用程序、Web 目录、以及保存在 Web 目录中的资源配置进行展示,

在 ASP.NET 2.0 中,你可以通过使用 WebConfigurationManager 对象的方法获取配置段并对 Configuration 类实例进行访问。在 .NET Framework 客户应用程序中,你可以使用类似的 ConfigurationManager 对象。

下面的内容对不同情况下的配置类使用方式进行描述。

下例所有实例都需要首先使用非静态的 System.Configuration.Configuration.GetSection(System.String) 方法和 System.Configuration.Configuration.GetSectionGroup(System.String) 方法创建 System.Configuration.Configuration 类实例。这样允许你从任何应用程序中获取配置信息。如果你在获取当前应用程序的配置信息时,请使用静态方法 GetSection,以获得更快的处理速度。

打开被映射在全局配置设定中的配置对象

要打开全局配置文件,你的应用程序应该调用 WebConfigurationManager 类的静态方法 OpenMachineConfiguration。在接下来的代码实例中,OpenMachineConfiguration 方法打开并返回与 .NET Framework 2.0 的 Machine.config 文件相匹配的配置对象。该方法被重载后的其他版本则允许你对位置、远程服务器、以及用户信息进行指定。

// 获取本地计算机的机器配置设定
System.Configuration.Configuration machineConfig = System.Web.Configuration.WebConfigurationManager.OpenMachineConfiguration();
machineConfig.SaveAs("c:\\machineConfig.xml");

配置 API 通常是与版本相关的。所以,不可以使用该方法打开其他版本 .NET Framework 中的 Machine.config 文件。

必需的特权

要打开机器配置文件,应用程序需要拥有物理 Machine.config 文件的读取权限。要对机器配置进行更改,应用程序需要拥有该文件的写入权限,以及创建 .NET Framework 配置目录的特权。

打开被映射在 Web 应用程序配置中的配置对象

要打开 Web 应用程序的配置文件,你的应用程序需要调用 WebConfigurationManager 类的静态方法 OpenWebConfiguration,并把要打开的 Internet 信息服务(IIS)管理器虚拟目录的相关路径作为参数传递。

path 参数的值可以从包含被请求配置的 IIS 元数据库路径中获取。例如,如果 IIS 元数据库路径是 W3SVC1/ROOT/Temp,因为默认网站是 1,那么 path 的值就应该就是 /Temp。

在下例代码实例中,OpenWebConfiguration 方法打开并返回与默认网站的 Temp 应用程序相对应的配置对象。该配置对象包括本地 Web.config 文件中指定的配置设定以及所有继承自父配置文件的设定,一直追溯到 Machine.config 文件。该方法被重载的其他版本允许你对网站、位置、远程服务器、以及用户信息进行指定。

// 获取 Web 应用程序的配置设定。
System.Configuration.Configuration webConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Temp");
webConfig.SaveAs("c:\\webConfig.xml");

甚至在物理 Web.config 文件不存在的时候也能够打开 System.Configuration.Configuration 对象。这种情况下被返回的配置由继承自配置文件层次中的全部设定而组成。

必需的特权

要打开 Web 配置文件,应用程序需要拥有物理 Web.config 文件以及配置层次中的所有父文件的读取权限。

打开被映射到配置段中的配置对象

要从配置段中获取配置信息,你的应用程序需要调用 Configuration 类的非静态方法 GetSectionGroup,并传递配置段名参数。至于包含在配置段分组中的配置段,你既可以为配置段(System.web/anonymouseIdentification)使用 XPath,也可以获取第一个被映射到配置段分组的配置对象。

下例代码实例中,OpenWebConfiguration 方法打开并返回默认网站的 Web 应用程序(Temp)配置对象,然后使用该对象获取 system.web 配置段分组的引用,该对象同样也可以被用于获取 anonymouseIdentification 配置段的引用。

// 获取 <anonymouseIdentification> 配置段中的配置设定。
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 文件不存在的时候也能够打开 System.Configuration.Configuration 对象。这种情况下被返回的配置由继承自配置文件层次中的全部设定而组成。

必需的权限

要打开某个 Web 配置文件的配置段,应用程序需要拥有物理 Web.config 文件以及所有父文件的读取权限。被托管代码应用程序还需要相应的权限以对系统配置段进行读取。完全可信度和高可信度的应用程序在默认时已经拥有这些权限。换句话说,默认时,中可信度和低可信度应用程序将无法对配置段进行读取。

打开被映射到远程配置设定中的配置对象

你可以使用配置 API 打开远程计算机上的配置。配置 API 可以打开另一台计算机中的机器配置文件,以及任何 IIS 应用程序或子目录中的应用程序配置文件。

要打开另一台电脑的机器配置文件,应用程序需要调用静态方法 OpenMachineConfiguration,并把服务器名称作为参数传递给该方法。

要打开另一台电脑的 Web.config 文件,应用程序需要调用静态方法 OpenWebConfiguration,并把网站相对路径、网站标识符、和服务器名称一并传递给配置对象。被返回的配置对象中包括了本地 Web.config 文件设定和所有父配置文件中的被继承设定,一直追溯到 Machine.config 文件。

服务器名称是有效的 Windows 网络计算机名称。这些名称并没有被 ASP.NET 处理,而是直接传递给操作系统。

下例代码实例说明了如何打开默认网站根配置中的机器配置,以及应用程序目录中的 Web 配置。

IntPtr userToken = System.Security.Principal.WindowsIdentity.GetCurrent().Token;// 获取远程计算机的机器配置设定。
System.Configuration.Configuration remoteMachineConfig = System.Web.Configuration.WebConfigurationManager.OpenMachineConfiguration(null, "ServerName", userToken);
remoteMachineConfig.SaveAs("c:\\remoteMachineConfig.xml");// 获取远程计算机的根网站配置。
System.Configuration.Configuration remoteRootConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null, null, null, "ServerName", userToken);
remoteRootConfig.SaveAs("c:\\remoteRootConfig.xml");// 获取远程计算机目录 W3SVC/1/Root/Temp 的应用程序配置设定
System.Configuration.Configuration remoteWebConfig = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("/Temp", "1", null, "ServerName", userToken);
remoteWebConfig.SaveAs("c:\\remoteWebConfig.xml");
必需的特权

要打开远程计算机上的配置文件,应用程序必须拥有远程计算机上的管理员特权。这个需求比在本地使用时要受到更多的限制。至于本地配置文件,应用程序只需要拥有配置文件和 IIS 元数据库(用于解析 IIS 路径)的读取权限就可以了。

请在尝试进行配置之前使用“-config+”参数运行远程计算机上的 Aspnet_regiis.exe 工具。

更新配置设定

要对已打开的配置对象进行更新,应用程序需要调用 Configuration 对象的 Save 方法或者 SaveAs 方法。这些方法为该对象对任何配置设定所做的更改进行写入。如果配置文件尚不存在,将会自动创建一个全新的配置文件。

下例代码实例把 compilation 配置段的 debug 参数设置成 true

// 更新 Web 应用程序配置设定。
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.");
}

现在,在更新配置数据的时候不存在任何有效的锁定功能。因此,配置 API 会使用一个优化的合作模型对配置进行更改。在优化的合作模型之下,如果两个应用程序同时打开相同的配置,它们将会得到配置对象的唯一配置。如果某个应用程序尝调用 SaveSaveAs 方法对配置文件进行更改,并且实际的配置文件在应用程序已经在获取配置对象之后更新了配置,那么该方法就会引起一个异常。实际文件可能在另一个应用程序更新配置或者对依赖于文件的配置 API 进行更改的时候就已经被更改。

必需的特权

要更改 Web 配置,应用程序需要拥有文件的写入权限,还要拥有包含该文件的目录的创建特权。

转载于:https://www.cnblogs.com/Laeb/archive/2006/12/21/599474.html

使用 ASP.NET 配置类相关推荐

  1. ASP.NET 配置节架构

    ASP.NET 配置节架构包含控制 ASP.NET Web 应用程序行为的元素.如果为属性指定了默认值,则该默认值是在 Machine.config 文件中设置的,该文件的路径是 systemroot ...

  2. ASP.NET 配置概览

    使用 ASP.NET 配置系统可以配置服务器上的任何 ASP.NET 应用程序,甚至是单独的页面或应用程序子目录.可配置的内容包括有:授权模式,页面缓存,编译器选项,自定义错误,调试和跟选项,以及更多 ...

  3. feignclient多个配置_@FeignClient同一个name使用多个配置类的解决方案

    Feign有一个局限性,即对于同一个service-id只能使用一个配置类,如果有多个@FeignClient注解使用了相同的name属性,则注解的configuration参数会被覆盖.至于谁覆盖谁 ...

  4. Spring Security 进阶干货:自定义配置类入口WebSecurityConfigurerAdapter

    1. 前言 今天我们要进一步的的学习如何自定义配置 Spring Security 我们已经多次提到了 WebSecurityConfigurerAdapter ,而且我们知道 Spring Boot ...

  5. Spring Cloud + Mybatis配置类设置

    spring cloud 继承mybatis相关配置类 /*** 该类配置数据源相关属性*/ @ConfigurationProperties(prefix = DataSourcePropertie ...

  6. 在PHP中模拟asp的response类

    在PHP中模拟asp的response类 习惯了asp或是asp.net开发的人, 他们会经常用到response类,这个类用于处理客户端的相应,可以实现跳转,输出等功能. 在php中没有这个类,但是 ...

  7. 支付宝支付 第四集:配置类的定义和注入

    支付宝支付 第四集:配置类的定义和注入 一.代码 目录结构 application-dev.yml # 支付宝支付参数配置 alipay:app_id: 公司支付宝的APPIDmerchant_pri ...

  8. Spring Security 实战干货:自定义配置类入口 WebSecurityConfigurerAdapter

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 今天我们要进一步的的学习如何自定义配置 Sp ...

  9. Shiro 使用 JWT Token 配置类参考

    项目中使用了 Shiro 进行验证和授权,下面是 Shiro 配置类给予参考. 后来并没有使用 Shiro,感觉使用 JWT 还是自己写拦截器比较灵活,使用 Shiro 后各种地方需要魔改,虽然功能也 ...

最新文章

  1. 基于产生式的动物识别专家系统_钇鑫智通打造“极致流畅人脸识别闸机”
  2. 一篇文章教你学会Java泛型
  3. springmvc+mybatis+dubbo+zookeeper分布式架构
  4. 90.不用其它变量进行变量互换
  5. setValuesForKeysWithDictionary:的用途
  6. python 设置请求时间间隔_如何自学Python爬虫?新手入门教程
  7. mysql连接本地数据库失败_“sql server”连接本地数据库失败怎么办?
  8. 航天金税502设置模拟环境步骤
  9. MATLAB求分段函数最大值,如何用MATLAB求分段函数的最小值和最大值?
  10. 【电脑配置图】i3-10100f+1650显卡(2020.11.28)了解
  11. http 阮一峰_WebSocket 教程 | 阮一峰
  12. 今日小程序推荐:动态壁纸-你专属壁纸!
  13. 雨刮器全国产化电子元件推荐方案
  14. 华为设备Voice VLAN配置命令
  15. CA410_SDK测试及读数软件
  16. 使用word绘制钟表刻度表盘
  17. 第四回:matplotlib文字图例尽眉目
  18. filezilla 后文件传输失败_filezilla严重文件传输错误技术分享
  19. 365天挑战LeetCode1000题——Day 096 消失的两个数字 子串能表示从 1 到 N 数字的二进制串 检查数组是否存在有效划分
  20. android导入项目出现Originally defined here错误

热门文章

  1. eclipse安装birt插件
  2. hdu 2563
  3. [wikioi 1307][poj 2054]欧少堆(乱搞)
  4. 征集活动 | PMCAFF八周年,十万产品经理送祝福
  5. 大咖分享会 | 百度首次揭秘如何构建用户画像与移动统计
  6. 产品汪们匿名自爆工资,看完心里好难受......
  7. ROS学习笔记(一)
  8. java.util.concurrent.Locks使用指南
  9. kali下Wreckuests | DDOS Atacks With HTTP-Flood
  10. phpmyadmin不允许一个表创建多个主键的解决办法