【问题标题】:How to handle web.config content's update event? How to detect that web.config has changed?如何处理 web.config 内容的更新事件?如何检测 web.config 已更改?
【发布时间】:2011-05-11 11:26:27
【问题描述】:

如何处理 web.config 内容的更新事件?我的意思不是出于管理员目的(wmi 等),而是出于编程目的 - 如果配置参数发生更改,我需要重新计算 Web 服务中的一些数据。

WebConfigurationManager、ConfigurationManager、Configuration、ConfigurationSection、SectionInformation中都没有合适的事件……那么去哪里挖呢?

附: .net 3.5

【问题讨论】:

  • 我认为您需要提供有关您正在使用的技术的更多信息,并可能相应地标记问题。
  • 嗯...我只能添加 Web 服务托管在 MS IIS 上(惊喜)并重复我需要知道如何通知 Web 服务它的 web.config 具有改变(由“手”)。

标签: .net web-services configuration web-config


【解决方案1】:

您可以使用 System.IO.FileSystemWatcher 监控任何文件的更改,包括 Web.config。当文件更改时,它会引发一个事件。

【讨论】:

    【解决方案2】:

    使用 System.IO.FileSystemWatcher 会带来两个架构问题(和一个令人头疼的问题 - 安全性)。首先是无法在更改期间锁定“整个配置”(静态和可重新计算),其次是在哪里托管监控线程的问题。

    有框架事件就好了,可惜没有这样的事件。但我发现有一个舒适的解决方案 - 具有覆盖 PostDeserialize 方法的自定义配置部分。由于我不了解整个过程,因此存在一些风险,有很多神秘之处:在每次配置编辑 TWICE 时重新创建自定义部分实例,构造函数调用两次,Init 方法调用两次,当 PostDeserialize - 仅调用一次 - 所以一切都是对我们来说没问题 - 但谁知道我们会在生产中遇到什么......

    public class CustomSettings : ConfigurationSection
        {
               protected override void PostDeserialize()
                {
                    base.PostDeserialize();
                    findCertificate(this["Thumbprint"]); // searching for certificate in windows certificate repository and setup Certificate property
                }
    
                public CustomSettings()
                {
                    InternalProperties = new ConfigurationPropertyCollection(/*... */)
                }
                //...
                public X509Certificate Certificate { get; private set; }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 2014-04-23
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多