.NET项目中自定义配置文件,如何使用configSource

  我们都知道,在asp.net中修改了配置文件web.config后,会导致应用程序重启,所有会话(session)丢失,session默认是存放在内存的,所以会丢失,您可以保存到数据库中。然而,应用程序的配置信息放在配置文件里是最佳选择,在后台修改了配置后导致所有会话丢失是非常不爽的事情,这个时候可将配置文件中经常需要改变的参数配置节(使用configSource)放到外面来,例如appSetting节:

1 <appSettings configSource="congfig\forward.config"/>

    这样在程序中修改Config\account.config文件,就不会导致重启了。

  如果配置包含文件(account.config)中的任何设置在修改后需要(特定情况下,比如修改appkey)重新启动应用程序,请将RestartOnExternalChanges 属性设置为 true,否则设置为false,RestartOnExternalChanges默认值为 true。意是外部文件,而非web.config文件本身。

1 <appSettings configSource="congfig\forward.config" RestartOnExternalChanges="true"/>

  以上写法是错误的,应该修改machine.config文件中的restartOnExternalChanges属性

  关于拆分web.config文件分而治之从以下几点考虑:

  a. 经常发生变化

  某些配置节我们在开发时经常要修改或更新,如果能单独拉出来进行配置,这样修改时就不必碰web.config。不同环境下的web.config都引用了同一个配置节config,所以这样的修改只需要做一次,而不必去修改所有环境的web.config。

  b. 内容行数特别多

    有时候web.config里有些配置节 都是一大坨一大坨的,影响了web.config整体的审美观。我们完全可以把这些大 坨的配置节内容单独抽取出来,这样一来,web.config就简洁多了,也便于阅读 。

  c. 不同环境下,配置节内容是不一样的

    我们经常会有这样的配置节,对于这种情况,我们完全可以考虑拆分出来, 并且生成不同环境下的配置文件。而不同环境下的web.config只要引用对应环境的配置节文件即可。     即使环境发生了变化,我们也不需要去动web.config,只要去修改相应环境下配置节文件即可。

  当然,以上这三种特征不是互斥的 ,很可能某一配置节含有以上两种或三种特征。这些配置节更需要我们认真对待,通过多重策略来进行拆分。

  【出自MSDN】在 .NET Framework 2.0 版中,现在可以在一个单独文件包括所有支持 configSource 属性的配置元素的配置设置。但是,当使用 configSource 属性时,由于没有元素设置的合并,因此您必须将整个节移动到单独文件。使用 configSource 属性时,对 Web.config 文件有一次写入操作。这会导致应用程序重新启动,但是随后对该节的更新会直接写入单独文件,而不会导致后面的应用程序重新启动。

  有关更多信息,请参见 ConfigSource。http://msdn.microsoft.com/zh-cn/library/ms228154(VS.80).aspx

 

  扩展实践:

  1、为什么外部配置文件的后缀是.config?而且修改了后缀会不会读取不了呢?

  我不解释,实践下好了:

  第一次试验文件名为 forward.config,通过域名访问此文件,得到的结果是:

1 HTTP 错误 404.7 - Not Found
2 请求筛选模块被配置为拒绝该文件扩展名。

  第二次试验文件名为 forward.ini,通过域名访问此文件,得到的结果是:

1 HTTP 错误 404.17 - Not Found
2 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。

  第三次试验文件名为 forward.txt,通过域名访问此文件,得到的结果是:

 1 <?xml version="1.0" encoding="utf-8"?>
 2  <CustomConfiguration>
 3    <urls>
 4      <!--首页-->
 5      <add virtualUrl="~/index.html" destinationUrl="~/index.aspx"/>
 6      <!--登录-->
 7      <add virtualUrl="~/login.html" destinationUrl="~/Member/login.aspx"/>
 8      <!--注册-->
 9      <add virtualUrl="~/register.html" destinationUrl="~/Member/register.aspx"/>
10    </urls>
11  </CustomConfiguration>

  基于第三次把文件后缀修改为txt,运行项目,证明,修改后缀不影响文件的读取和解析。

  这样应该能说明情况了吧,至少是为了安全性上的考虑,您总不会公开自己的appkey或者密码之类的数据吧。

  不管怎样,试试才知道,不试永远不知道。

 

posted on 2013-06-03 17:40  兔儿爷  阅读(416)  评论(0)    收藏  举报

导航