2010-11-17 183 views
1

如何处理web.config内容的更新事件?我的意思是不是为了管理员的目的(WMI等),但编程 - 我需要重新计算Web服务内的一些数据,以防配置参数改变。如何处理web.config内容的更新事件?如何检测web.config已更改?

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

P.S. .net 3.5

+0

我想哟需要提供有关您正在使用的技术的一些更多的信息,并可能相应标签的问题。 – 2010-11-17 14:59:44

+0

嗯......我可以只添加该Web服务托管在MS IIS(惊喜),并重复我需要知道如何通知Web服务的事实,其web.config已更改(通过“手”) 。 – 2010-11-17 15:32:15

回答

1

使用System.IO.FileSystemWatcher带来两个体系结构问题(以及一个头痛 - 安全性)。首先是不可能在更改过程中锁定“整体配置”(静态和可重新计算),其次是提供监视线程的问题。

这会很高兴有框架事件,不幸的是没有这样的事件。但我发现有一个舒适的解决方案 - 具有重写的PostDeserialize方法的自定义配置部分。由于我不了解整个过程,因此存在一些风险:每个配置编辑TWICE都会重新创建自定义节实例,两次调用构造函数,两次调用Init方法,PostDeserialize时只调用一次 - 所有都是OK我们 - 但谁知道我们能生产满足...

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

    } 
1

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