zoukankan      html  css  js  c++  java
  • 通过编程读写 web.config 中的配置节

           ASP.NET 在 System.Web.Configuration 命名空间中提供 WebConfigurationManager 类,它允许在运行时从配置文件获取信息。为使用方便,应先引入 System.Web.Configuration 命名空间。

    AppSettings 属性

           提供对应用程序配置文件的 <appSetting> 节的所有自定义信息的访问,每个设置通过一个按名称索引的集合提供。

    string isdn1 = WebConfigurationManager.AppSettings["ISDN1"];

    ConnectionStrings 属性

           提供对应用程序配置文件的 <ConnectionStrings> 节的所有自定义信息的访问,每个设置通过一个按名称索引的集合提供。

    string conStr = WebConfigurationManager.ConnectionStrings["NorthwindConnection"].ConnectionString;

    GetSection() 方法

           返回一个封装了配置文件特定配置节信息的对象

    AuthenticationSection authSection = WebConfigurationManager.GetSection("System.web/authentication") as AuthenticationSection;

           搜索使用类似路径的语法执行。不必制定根元素<configuration>,因为所有的配置节都包含在这个元素里。所有配置节的类都定义在 System.Web.Configuration 命名空间的类库里(不在 System.Configuration 中,它只包含所有 .NET 应用程序通用的配置类),所有这些类都继承 System.Configuration.ConfigurationSection 类。

           通过 ConfigurationSection 对象,可以获得应用程序当前状态的很多信息。

           下面这个示例显示当前引用的程序集的信息:

    CompilationSection compSection = WebConfigurationManager.GetSection("system.web/compilation") as CompilationSection;
    foreach (AssemblyInfo assm in compSection.Assemblies)
    {
        Response.Write(assm.Assembly + "<br />");
    }

    image

           使用 GetSection()方法或后面要介绍的OpenWebConfiguration()方法获取信息时,它们反应的是当前应用程序的符合配置信息。也就是说,是当前web.config文件和那些更高层次的配置文件(例如,跟web。config和machine.config文件)里定义的信息的合并结果。

    OpenWebConfiguration() 方法

           返回一个可编辑的 Configuration 对象,它提供对指定 Web 应用程序的配置信息的访问。

           可以通过 WebConfigurationManager 类修改大多数的配置节,实际上,ASP.NET 管理网页就依赖这一功能。首先调用 OpenWebConfiguration() 方法得到一个 Configuration 对象,然后使用该对象的 GetSection() 方法获取需要修改的配置节,并用 Save() 方法提交修改。

           修改设置时,ASP.NET 会使用同步代码保证多个用户不能同时提交更新来安全地处理更新。

           对于你的代码,你最可能修改的是 <appSettings>和<connectionStrings>节的设置。

    protected void Page_Load(object sender, EventArgs e)
    {
        Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
        Label1.Text = config.AppSettings.Settings["websiteName"].Value;
        Label2.Text = config.AppSettings.Settings["welcomeMessage"].Value;
        config.AppSettings.Settings["welcomeMessage"].Value = "Hello again!";
        config.Save();
    }
    <appSettings>
      <add key="websiteName" value="My Website1" />
      <add key="welcomeMessage" value="Hello again!" />
    </appSettings>

           这个应用程序反应了根Web应用程序目录的累积配置,因为它在调用 OpenWebConfiguration() 方法时传递的值是 Request.ApplicationPath;如果使用子目录的名字,将会得到子目录文件夹的累积设置;如果使用 Request.CurrentExecutionFilePath 路径,将会得到当前网页所在目录的累积设置项。

    必须注意

           web.config文件绝不是状态管理的理想方案!它只适合偶尔更新设置,因为修改配置设置的代价很大。文件访问速度很慢,修改时的同步化增加了额外的负担,真正严重的是,每次修改配置设置时创建新应用程序域的代价非常大,页面要重新编译为本机代码,并缓存和加载。更糟的是,Application和Caching中的值会丢失,如果你使用进程内的会话提供程序,Session集合中的信息也会丢失。

           还要明白的一点是,如果修改了继承的设置(如machine.config文件中的设置),那么保存变更时,修改的值不会覆盖配置文件中现有的值。相反,新值被保存在本地的web.config文件中,它只会覆盖当前应用程序继承的值,这是一种安全保障机制。

           你还可以使用 SaveAs()把配置文件保存到其他文件中。

           Save()方法还可以接受一个枚举参数:

    ConfigurationSaveMode.Modified:保存你所改变的所有的值,即使它们和继承的值没有差异。

    ConfigurationSaveMode.Full:把所有内容保存在本地web.config,这在测试盒发布重复配置文件时非常有用

    ConfigurationSaveMode.Minimal:只保存与继承级别不同的值。(默认选项)

  • 相关阅读:
    (TOJ1004)渊子赛马
    (TOJ1063)养兔子
    (TOJ3260)Palindromes
    (TOJ1070)Least Common Multiple
    (TOJ1215)数据结构练习题——合并表
    (TOJ1481)C语言实验题——鞍点
    (TOJ1496)C语言实验题——字符过滤
    (TOJ1003)1、2、3、4、5...
    (TOJ1490)C语言实验题——合法的C标识符
    (TOJ2804)Even? Odd?
  • 原文地址:https://www.cnblogs.com/SkySoot/p/2584351.html
Copyright © 2011-2022 走看看