2010-11-17 75 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)上的更改。它會在文件更改時引發事件。