如何处理web.config内容的更新事件?如何检测web.config是否已更改?

时间:2010-11-17 14:57:37

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

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

WebConfigurationManager,ConfigurationManager,Configuration,ConfigurationSection,SectionInformation中没有任何合适的事件......那么在哪里挖掘它们?

P.S。 .net 3.5

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

使用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; }

    }