2012-02-28 27 views
0

我有一個引用DLL的Web應用程序。該DLL具有特定的配置值,通常是web.config的一部分。動態切換配置文件(網頁或應用程序配置)

需要在Web應用程序的不同配置下調用此DLL。該DLL是第三方,不能更改。

已經嘗試了以下並失敗。

  1. 有不同的DLL副本(名爲a.dll,b.dll)並通過反射來加載它。這裏的問題是它仍然會查找web.config而不是a.dll.config。此外,由於在主程序中引用了相同的類型以及反射的程序集,因此它變得瘋狂。
  2. 使用AppDomain.CurrentDomain.SetData("WEB_CONFIG_FILE", @"Config\Path")即時更改配置,並在通話結束後將其切換回來。這裏的問題是,第一次之後,即使我切換,它也不會再加載配置部分。使用ConfigurationManager.RefreshSection(@"configuration\mysection")強制刷新。這似乎並沒有工作,人們都說這個調用是在NET中的越野車
  3. 我見過一些建議更新web.config,但這可能不是一個好的選擇,因爲值的切換會發生相當頻繁

有什麼我可以做的嗎?

回答

2

在單獨的進程中託管DLL並使用COM(或.Net遠程處理或Web服務或類似方式)進行通信。

I.e.使用C#(例如)將一個類作爲COM對象公開,從而創建一個宿主進程a.exe,這些類依次調用DLL方法/類。註冊爲COM對象。

然後創建b.exe相同(但具有不同的CLSID)。

現在,您可以爲a.exe和b.exe(在不同的文件夾中)配置不同的配置文件,但都可以使用DLL服務。

你也可以做兩件類似的事情,有兩個內部Web應用程序,並使用SOAP或其他東西與他們交談。

但底線是如果DLL在web.config上工作,則必須將其中至少一個放入單獨文件夾中的單獨進程中。

+0

如果每個調用都創建一個新實例,則超出proc將會工作。由於我的應用流量很低,因此這不應該成爲問題。將嘗試這個並回來。但令人沮喪的是,沒有真正的解決方案來實現諸如即時切換配置。 – fozylet 2012-02-28 16:04:38

+0

@fozylet,使兩個不同名稱的進程,不同的clsids,每個配置一個。然後,每個人都可以重新使用,而無需重新啓動過程。 – Ben 2012-02-28 16:12:06