zoukankan      html  css  js  c++  java
  • 创建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了。

  • 相关阅读:
    Mac开发——设置关闭窗口之后点击Dock中的图标可以再次打开窗口
    添加学院的 Exchange邮箱到手持设备中
    黑苹果 装SVN工具 cornerstone无法打开解决办法——网卡内建
    解决cocos2dx在Xcode中运行时报:convert: iCCP: known incorrect sRGB profile 的问题
    Lua中的正则表达式的使用
    C++11 标准新特性:Defaulted 和 Deleted 函数
    HTML5基础
    第一本书考试错题
    字符串
    带参数的方法
  • 原文地址:https://www.cnblogs.com/wysimon/p/1432926.html
Copyright © 2011-2022 走看看