创建T100Monitor技术研究过程

T100Monitor: 用于

1、监控网站的HTTP服务是否正常,2、监控Web服务器是否能正常连接数据库服务器

T100Monitor 采用C#编写一个Windows服务,并监控其配置文件T100Monitor.exe.config,若配置文件则立即加载新的配置数据,而不需要重启服务。

 

VS2008 C# Windows服务的开发:

      第一次使用 InstallUtil 注册服务时失败, 发现是项目是缺少安装的支持,

      增加服务安装的支持: 在服务组件的设计界面,点击右键,选择[添加安装程序],添加默认的安装程序:ProjectInstaller.cs,在安装程序组件的设计界面可查看或修改

serviceProcessInstaller1和serviceInstaller1的与服务相关的一些属性。

       编译后,使用InstallUtil安装服务成功。

 

开发过程遇到的问题:

发现一个vshost的exe和相应的配置文件,可能会影响测试,于是:

禁用宿主进程

在 Visual Studio 中打开项目。

  1. “项目”菜单上单击“属性”

  2. 单击“调试”选项卡。

  3. 清除“启用 Visual Studio 宿主进程”复选框。

禁用宿主进程后,将无法使用一些调试功能,或者将导致性能下降。有关更多信息,请参见调试和宿主进程

一般而言,禁用宿主进程后,将出现以下情况:

  • 开始调试 .NET Framework 应用程序所需的时间增加。

  • 设计时表达式计算不可用。

  • 部分信任调试不可用。

 

配置文件是监控:

      配置文件监控使用FileSystemWatcher,在设置Path、NotifyFilter后,加载事件Changed,最后不能忘记:watcher.EnableRaisingEvents = true;

      监控到配置文件的修改后,发现ConfigurationManager.AppSettings["ddd"]读的是缓存的数据,于是找到ConfigurationManager.RefreshSection
      查MSDN:

      ConfigurationManager..::.RefreshSection 方法:刷新命名节,这样在下次检索它时将从磁盘重新读取它。
      下面的代码示例演示如何使用 RefreshSection 方法刷新应用程序设置配置节。
      

 

Code

 

但执行ConfigurationManager.RefreshSection("appSettings");时出现异常:

加载配置文件时出错: 文件“D:\MyProj\Test\T100Monitor\bin\Debug\T100Monitor.exe.Config”正由另一进程使用,因此该进程无法访问该文件。 (D:\MyProj\Test\T100Monitor\bin\Debug\T100Monitor.exe.Config)

于是使用SysInternal的Filemon观察,发现使用UltraEdit修改文件,会有多次文件操作,使用Notepad就没有问题,但还是要处理这个异常:
                try
                {
                    ConfigurationManager.RefreshSection("appSettings");
                    Refresh();
                }
                catch (ConfigurationErrorsException ex)
                {
                    Logger.WriteLog(string.Format("ConfigurationErrorsException: {0}", ex.Message), _watchlogfile);
                }

这样就一切OK了。

 

posted @ 2009-04-10 10:41  道云  阅读(337)  评论(0编辑  收藏  举报