AppSettings In web.config

                                                                                                                                                  Written by K. Scott Allen 
                                                                                                                                                   Translated by jiangyh

ASP.NET提供了一个灵活的配置文件管理功能。在这篇文章中我们将介绍一些使用技巧和最好的使用方法来让我们取得最好的结果。

web.config文件中的<appSettings>元素可以用来存储连接字符串、服务器名、文件路径或者其他各种各样的配置信息。appSettings中的这些配置信息结构或内容由于受系统环境的影响时常是变化的,例如,任何的数据库连接字符串在我们DB服务器从测试环境调整到真正的产品环境的时候都需要变更。

看一下下面的例子,我们来练习一下如何从web.config文件中的<appSettings>段内取得连接字符串。Web.config的配置如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>   
  <system.web>
    <compilation defaultLanguage="c#" debug="true" />
  </system.web>
  <appSettings>
    <add key="ConnectionInfo" value="server=(local);database=Northwind;Integrated Security=SSPI" />
  </appSettings>
</configuration>

使用命名空间System.Configuration下的ConfigurationSettings类去取得连接字符串的内容,代码如下:

 1private void Page_Load(object sender, EventArgs e)
 2{
 3  string connectionInfo = ConfigurationSettings.AppSettings["ConnectionInfo"];
 4
 5  using(SqlConnection connection = new SqlConnection(connectionInfo))
 6  {
 7    connection.Open();
 8    // perform work with connection
 9  }         
10}

一般情况下一些应用程序中会将上面的代码复制到整个系统的很多地方,如果我们仔细的考虑一下,这在未来可能是个很麻烦的事情。

第一,我们通过不可变的代码(hard code)去取得web.config文件中的连接字符串,虽然比较容易实现,但是在连接字符串需要变化的时候很难去适应变化。

第二,这样的代码会让我们这部分配置信息完全束缚在web.config文件的appSettings中,使用web.config只是一个保存设置的办法,在未来我们可能会发现我们需要从数据库中取得这些设置信息或者改变这些配置信息从应用程序范围变化到每个客户的级别的Session或Cookie中的时候,都会有很多束缚。

   封装

 

让我们使用一个类中的静态属性来保存这个连接字符串。

 1using System.Configuration;
 2namespace aspnet.config
 3{
 4  public class Configuration
 5  {
 6    public static string ConnectionInfo
 7    {
 8      get
 9      {
10        return ConfigurationSettings.AppSettings["ConnectionInfo"];
11      }
12    }
13  }
14}

现在我们的Page_Load方法就像下面的代码一样。

1private void Page_Load(object sender, EventArgs e)
2{
3  using(SqlConnection connection = new SqlConnection(Configuration.ConnectionInfo))
4  {
5    connection.Open();
6    // perform work with connection
7  }         
8}

这样的改变可以使我们上面的代码变的相对的小一些,但是更强大。现在Page_Load方法不知道将取得到什么样的连接字符串。我们可以很容易的改变ConnectionInfo属性,从不同的代码中取得连接字符串,并且不用修改其它使用这个属性的代码。我们也不需要去记住连接字符串的键值并且复制到程序中的很多地方。反而,当我们访问Configuration类去取得需要的配置信息的时候,可以利用Visual Studio Intellisense。这个key在系统中只出现一次,所以我们可以再次改变连接字符串的key,而只需要修改一行代码。

当然这个方法就是原本所有代码从web.config文件中取得配置信息变化成了通过访问Configuration类来取得。我们还需要在Configuration类中增加所有的属性来匹配web.config中的配置信息。

这个方法的另外一个优点就是如果我们的配置信息的内容不是一个字符串的时候,例如是日期类型,数字类型或者原始的类型,在这种情况下,我们可以在Configuration类中的ConnectionInfo中进行适当的转型来返回我们需要的类型。

你将注意到了我提供了一个read-only属性给ConnectionInfo。web.config不是一个不被更新的常量。ASP.NET程序在运行的时候可以检测到web.config文件是否有变化。当ASP.NET程序发现你更新了web.config文件,任何的处理信息,例如Session, Application和 Cache都将会丢失(如果session没有存放在state服务器或者数据库中的时候)。

下面,让我们来看看appSettings的一些其他特点。

   多文件配置

 

appSettings元素可以包含一个文件属性来指向一个扩展的文件。让我像下面一样改变一下我们的web.config文件。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>   
  <system.web>
    <compilation defaultLanguage="c#" debug="true" />
  </system.web>
  <appSettings file="testlabsettings.config"/>
</configuration>

下面我们来创建一个新的文件[testlabsettings.config],并且增加一个appSettings段和连接字符串的信息。

<appSettings>
  <add key="ConnectionInfo" value="server=(local);database=Northwind;Integrated Security=SSPI" />
</appSettings>

如果这个扩展文件是可见的,ASP.NET能够包含web.config中appSettings段的配置信息和扩展文件的配置信息。如果一个key/value在web.config文件中和扩展文件中都存在的情况下,ASP.NET将使用扩展文件的值。

当你保持用户特定或者环境特定的配置信息在扩展文件里的时候,上面的例子将非常有用。当每一个用户或者安装的网站需要包含他们自己的配置文件的时候,请让web.config来包含这些文件并把这些配置信息作为一个全局的实例来使用。这个方法可以很容易去围绕这个全局的web.config文件变化并且也可以将web.config文件封装到控件里,而每个开发人员还可以得到他自己的设置。

有一点需要警告,ASP.NET程序无法在运行的时候检测到扩展文件的变化,你将需要手动改变web.config文件本身来启动一个新版本的ASP.NET程序

我希望本文可以在最大的程度上提供给你一些appSettings段的小技巧,如果需要更好的方法去处理配置信息,请去下载Enterprise Library

转载于:https://www.cnblogs.com/catjiangyh/archive/2006/12/15/593378.html

[翻译]AppSettings In web.config by K.Scott Allen相关推荐

  1. web.config配置数据库连接

    第一种:获取连接字符串 首先要定义命名空间 system.configuration 1.  string connstr= string constr = ConfigurationManager. ...

  2. iis的web.config提示appSettings缺少节申明

    Web.config对大小写敏感, 把AppSettings改为appSettings即可. 亲测可用,系统2008r2,iis6.1

  3. appsettings 连接oracle数据库,web.config中配置数据库连接的两种方式(appSettings 与 connectionStrings)...

    [预览] [转载博客]cnblogs.com/sunzhiyue/archive/2011/06/07/2074696.html 在网站开发中,数据库操作是经常要用到的操作,ASP.NET中一般做法是 ...

  4. 一个web.Config或app.Config自定义段configSections的示例

    一个web.Config或app.Config自定义段configSections的示例 越来越觉得,直接用配置文件app.Config或web.Config配置应用系统的运行参数,比自己做一个xml ...

  5. DotText源码学习——从配置文件Web.config入手(一)

    2010-03-19 17:18 by 吴秦, 2409 阅读, 12 评论, 收藏, 编辑 概述 ASP.NET配置数据存储在名为Machine.config/Web.config的XML文本文件中 ...

  6. Web.config详解+asp.net优化(1)

    一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式) ...

  7. Web.config详解+asp.net优化

    Web.config详解+asp.net优化(1) 一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的 ...

  8. [转]web.config保护连接字符串及其它设置信息

    [转]web.config保护连接字符串及其它设置信息 本文英文原版及代码下载: http://www.asp.net/learn/data-access/tutorial-73-cs.aspx Sc ...

  9. asp.net中web.config配置节点大全详解

    web.config 文件查找规则:        (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找.        (2)如果当 ...

  10. web.config文件详解

    (一).Web.Config是以XML文件规范存储,配置文件分为以下格式     1.配置节处理程序声明       特点: 位于配置文件的顶部,包含在<configSections>标志 ...

最新文章

  1. centos7上开启单用户模式
  2. Java中的Cookie(1)——基本操作
  3. 苹果电脑无法用普通域用户加入域,用域管理员却可以,怎么破!?
  4. 排序算法之low B三人组
  5. Python Demo 02 蒙特卡罗方法输出e
  6. matplotlib 绘制梯度下降求解过程
  7. python登录界面实现密码在明文与星号间切换_两个API让星号密码框显示成明文
  8. my.ini修改后服务无法启动_教你发布vue+.netCore项目到服务器
  9. [asp.net mvc]自定义filter
  10. liunx 中一个命令可以检测 ps -C java --no-heading| wc -l 一般用于shell脚步编写用
  11. Openstack安装(1)--keystone安装
  12. 惠普笔记本被政府盖章存隐藏键盘记录器,怎么回事?
  13. 回调函数处理图像(待整理)
  14. CISCO 基于时间访问控制
  15. Tabs | jQuery UI
  16. sql server2012 分页查询语句
  17. 用硅光电池测量白炽灯频闪
  18. python怎样使用各个日期赤纬_天文数据处理笔记之python(3)
  19. 生成带参数的微信二维码
  20. 什么是服务器丢包?恒讯科技教你如何解决

热门文章

  1. 业务逻辑实现方式的讨论:存储过程 good or bad?
  2. 《汇编语言》第一章笔记
  3. 数据和判定(二)------运算符
  4. 程序员应该做的事(转自CSDN)
  5. Python 之操作so动态库
  6. python实验室公众号_区块链研究实验室 | 使用Python编写Tendermint应用程序
  7. k means sse python_python实现kMeans算法
  8. android修改对话框大小设置,android – 如何更改对话框首选项消息的文本大小?...
  9. double精度丢失问题
  10. 使用javaGUI编写检测是否有网