从配置文件(*.config)读到内存中,手动修改配置文件后,内存中数据改变问题.

某些情况,我们把数据信息存储在*.xml或*.config文件中,存储在*.config中会比较安全,发布的程序,浏览器不会打开*.config文件,但是*.xml会在浏览器中呈现.

 

使用.config文件做一些配置,是我们的首选.但是也会遇到一些问题.如果.config文件是全局使用的文件,数据不需要经常改动,我们为了性能考虑,会把.config文件加载到缓存中或者其他位置,如Session,而不是每次打开.aspx页面是就从文件中读取数据.

 

我使用的是单态设计模式,一个configBLL类的构造方法中初始化配置文件到XmlDocument中,这个类设计成单态,如代码:

private XmlDocument SearchXml;
        /// <summary>
        /// 加载搜索的xml
        /// </summary>
        public SearchBoxBLL()
        {
            SearchXml = new XmlDocument();
            SearchXml.Load(System.Web.HttpContext.Current.Server.MapPath("/Config/SearchBox.config"));
        }

        private static SearchBoxBLL sbbll = new SearchBoxBLL();

        public static SearchBoxBLL Instance {
            get {
                return sbbll;
            }
        }

这样就不用每次从文件中重新读取数据,但是,这样使用会有一个问题:手动修改配置文件后,不重新启动IIS或者服务器,配置文件虽然修改,内存中的数据并没有跟着改变...

 

导致数据不一致,除非重启IIS.或者写一个类可以检测到配置文件的改动后重新加载配置文件的方法(可能比较难).再或者在页面中设计一个重置按钮,点击后重新构造SearchXML类...不过,还有一个比较偷懒的方法.

这是我的Web.config文件中的配置.

  <configSections>
    <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
    <section name="SearchBoxConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"/>
  </configSections>

 

 

  <RewriterConfig configSource="Config\UrlRewrite.config"></RewriterConfig>
  <SearchBoxConfig configSource="Config\SearchBox.config"></SearchBoxConfig>

可以看到,我使用了URLRewriter这个dll文件,然后把我自己的配置文件SearchBox.config配置成上方格式.type跟URLRewriter一样.

 

手动再修改SearchBox.config后,发现页面上的数据会重新加载,而不是从内存中读取,如果不修改SearchBox.config文件,则从内从中读取数据.

posted @ 2010-11-10 08:56  凌鸢  阅读(2745)  评论(2编辑  收藏  举报