更改windows服务的配置文件(app.config)无需重新启动

27人阅读 评论(0) 收藏 举报
分类:

这个问题是前一阶段写windows服务碰到的。本来在写获取配置文件的某个配置的值的时候,通常我都是写类似下面的这么一个静态方法来获取:

   1:          /// <summary>
   2:          /// 获取每次处理记录数
   3:          /// </summary>
   4:          /// <returns></returns>
   5:          private static int GetRecordCount()
   6:          {
   7:              int recordCount = 10000;
   8:              try
   9:              {
  10:                  recordCount = Math.Abs(int.Parse(ConfigurationManager.AppSettings["RecordCount"]));
  11:                  if (recordCount==0)
  12:                  {
  13:                      recordCount = 10000;
  14:                  }
  15:              }
  16:              catch 
  17:              {
  18:                  recordCount = 10000;
  19:              }
  20:              return recordCount;
  21:          }

RecordCount表示每次从数据库读取的记录数。在服务写好安装后测试的时候,这个参数改过好几次,起初它的默认值是10000,后来分别改过为500,100,50和10。可是改完之后我不得不重启服务才能让配置文件起作用。经过几次这种折腾之后,感觉体验太差了。上网一搜,找到了这一篇:Do you have to restart a windows service if you change the app.config? 在原问题中,一个哥们给出了解答,就是通过ConfigurationManager.RefreshSection刷新某一配置节点,我们获取配置值的时候就不需要重启服务了:

        /// <summary>
        /// 获取每次处理记录数
        /// </summary>
        /// <returns></returns>
        private static int GetRecordCount()
        {
            int recordCount = 10000;
            try
            {
                ConfigurationManager.RefreshSection("appSettings");// 刷新命名节,在下次检索它时将从磁盘重新读取它。
                recordCount = Math.Abs(int.Parse(ConfigurationManager.AppSettings["RecordCount"]));
                if (recordCount == 0)
                {
                    recordCount = 10000;
                }
            }
            catch
            {
                recordCount = 10000;
            }
            return recordCount;
        }

经过测试,确实如此。

你可能会问,为什么加了那一行ConfigurationManager.RefreshSection(命名节点);就可以了呢?

查看MSDN,解释是这样的:“刷新命名节,这样在下次检索它时将从磁盘重新读取”。下面是VS里的函数说明:

        //
        // 摘要:
        //     刷新命名节,这样在下次检索它时将从磁盘重新读取它。
        //
        // 参数:
        //   sectionName:
        //     要刷新的节的配置节名称或配置路径和节名称。
        public static void RefreshSection(string sectionName);

原来,更改配置文件之后,应用程序读取配置的顺序不是从物理文件读取,而是从其缓存中读取(ConfigurationManager.RefreshSection方法在不影响其他节的前提下使指定配置节的缓存失效),必须强制刷新配置文件,才能读取到更改后的配置节信息 。

毫无疑问,和正常的读取配置文件节点方法相比,这个读取配置的方法在性能上应该有点影响,至于损失多少,会不会造成性能瓶颈,你懂的。

最后,从MSDN的例子我们也可以看出来,这个方法对于动态写入/读取配置文件非常有效。不过对于web应用程序这个方法可能不适合,因为大家知道,修改web.config相当于重启了web应用程序。

查看评论

iis+php网站服务器环境配置视频教程

-
  • 1970年01月01日 08:00

Windows服务中读取配置文件的方法

最近做DSS开发,临近尾声,准备将DSS以服务的形式部署于目标机器中,但读取配置文件这等小事却也有时候会颇费时间,主要目的是让服务程序读取服务可执行文件同目录中的配置文件,基于前人代码基础上,适用于D...
  • xiejiashu
  • xiejiashu
  • 2013-02-05 14:23:20
  • 8191

App.config配置文件

  • 2009年09月06日 20:55
  • 124KB
  • 下载

应用程序配置文件app.config

1.配置文件概述:   应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。配置文件的根节点是co...
  • thunder09
  • thunder09
  • 2011-03-08 11:44:00
  • 3312

类项目中的配置文件app.config在打包安装后的信息获取的问题

在一个项目中碰到这样的一个问题,做一个WORD插件,功能在类库项目中实现了,配置信息存在类库项目的配置文件app.config中,在进行打包后,获取的配置文件中的DocType节点信息时,使用以下方法...
  • qq798833488
  • qq798833488
  • 2016-06-21 20:23:45
  • 2376

配置文件——App.config文件读取和修改

using System; using System.Configuration; using System.Reflection; using System.Xml; namespace Jura...
  • Shiyaru1314
  • Shiyaru1314
  • 2016-04-21 16:23:56
  • 8619

App.Config配置文件说明

前言   在项目中,为了使代码更加灵活,更加方便调整,我们都在config中添加许多配置信息,一般可以选择.NET自带的配置文件形式app.config或者web项目中的web.config来完成配...
  • Gnd15732625435
  • Gnd15732625435
  • 2016-12-01 22:34:01
  • 897

读取 为 指定 dll 添加的 配置文件App.config

读: /// /// 获取配置文件AppSeting节点数据信息 /// /// /// public st...
  • yan_hyz
  • yan_hyz
  • 2013-04-28 13:16:50
  • 3029

在C#类库中使用App.config文件自定义配置

做项目时,经常需要在自己设计的类库中使用很多用户配置。虽然在应用程序的App.config和Web应用程序web.config这样的文件里配置也能满足需求,但这样做不仅会让主配置文件的内容变得多、杂,...
  • aojiancc2
  • aojiancc2
  • 2014-03-20 14:30:35
  • 14037

C# 配置文件App.config的使用操作

应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序。 配置文件的根节点是configuration...
  • e295166319
  • e295166319
  • 2017-09-04 17:37:34
  • 1135
    个人资料
    等级:
    访问量: 1667
    积分: 125
    排名: 119万+
    文章存档
    最新评论