jblzg的技术园

关注基于.Net的Web解决方案,高性能数据库设计,高性能Web服务解决方案,关注移动开发

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

“对这些重要文件*注1的修改将立即被ASP.NET运行库检测到,并导致所有页面被重新编译。”

——《精通ASP.NET程序设计 Programming Microsoft ASP.NET》第12章

如上面所述,我们在修改配置文件Web.config时,因为所有页面都会重新编译,会导致短暂的服务中断。这里有一个方法可以避免:

 

将常用且有可能发生改变的配置都放在appSetting节中,如:

<appSettings>
    
<add key="SMTPServerAddress" value="0.0.0.0"/>
</appSettings>


Web.config中appSettings节有个属性:configSource,这个属性可以指定一个存储appSettings的外部文件路径(只支持相对路径),而这个外部文件的修改是不会引起页面的重新编译的,同时它的改动也能立即被ASP.NET运行库检测到。可谓一举两得。

Web.config中的appSettings的配置:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    
<appSettings configSource="Settings\WebAppSettings.config" />
</configuration>


外部文件Settings\WebAppSettings.config的内容:

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
    
<add key="SMTPServerAddress" value="0.0.0.0"/>
</appSettings>

 

*注1、Web.config配置文件

----------------------------------------------------------------------

20091120 UPDATE

后来的事实证明,默认情况下,外部的配置文件修改并不会让修改立即生效,要马上生效要回收该WebApp的应用程序池。

分离配置文件的好处并非如我之前所讲可以避免重新编译,而是使Web.config环境无关,不用为生产服务器和开发服务器维护2份Web.config,有差异的部分都分离出来即可[1]。比如在开发和生产环境使用不同的connectionStrings.config 和 smtp.config,好处是 web.config 更小巧且更易读, 不需要为生产开发两个环境分别配置Web.config。

 [1]参考:http://weblogs.asp.net/fmarguerie/archive/2007/04/26/using-configsource-to-split-configuration-files.aspx

posted on 2008-09-24 11:49  jblzg  阅读(3358)  评论(6编辑  收藏  举报