今天在個WCF程序中加入了修改配置文件的功能。我是直接通過IO操作修改的app.config文件內容,修改后發現發現其並不生效,用Google搜了一下,在園子里的文章動態修改App.Config 和web.Config中找到了解決方案。
原來,.net framework中對於配置文件不是實時讀取的,而是有緩存的。對於那些已經更新了的內容,需要調用ConfigurationManager.RefreshSection(需要添加System.Configuration.dll的引用)函數刷新相應節點。
比較蛋疼的是,這個函數並不支持刷新Group。也就是說,我們不能通過ConfigurationManager.RefreshSection("system.serviceModel")一句話實現對WCF的配置刷新,需要調用如下四句話才行。
ConfigurationManager.RefreshSection("system.serviceModel/behaviors");
ConfigurationManager.RefreshSection("system.serviceModel/bindings");
ConfigurationManager.RefreshSection("system.serviceModel/client");
ConfigurationManager.RefreshSection("system.serviceModel/services");
另外,值得一提的是:如果用IO操作修改修改app.config配置,直接使用相對路徑"myapp.exe.config"來修改不可靠的,很容易出現找不到配置文件的異常(原因有很多種),需要使用AppDomain.CurrentDomain.SetupInformation.ConfigurationFile屬性來獲取配置文件的完整路徑。