2010-03-23 62 views
5

我很難管理ASP.Net應用程序的配置,以便爲不同的客戶端部署。需要浪費的不同設置的龐大體積會佔用大量時間,而當前的配置方法太複雜,無法將此責任推給合作伙伴。如何管理ASP.NET中的應用程序配置?

任何關於更好的方法來處理這個或好的信息來源研究的建議?

我們如何在現在的事:

這些Web.Config中引用,例如AppSettings.xml
  • 各種XML配置文件。
  • 特定站點的配置保存在重複的配置文件中。包含特定的網站
  • 在某些情況下的數據,手動一次性更改名單溫莎IOC數據庫
  • C#配置
  • 文本文件。

我們遇到的具體問題:

  • 不同部位具有不同特徵的啓用,我們必須跟和不同的業務規則不同的外部服務。
  • 不同的部署類型(現場,測試,培訓)
  • 配置密鑰不同版本進行更改(得到補充,刪除),這意味着我們必須更新所有的重複文件
  • 我們仍然需要能夠改變鍵,在該應用程序是在我們如何處理這個運行

我們目前的想法是:

  • 移動配置成動態編譯的代碼(可能是噓聲,Binsor或JavaScript)
  • 有某種形式的版本比較/合併配置:用活/測試/培訓配置和特定的站點配置結合了默認配置
+0

最後我去了一個合併配置系統。配置文件存儲在樹中。加載密鑰時,它首先查找最具體的版本(站點和部署類型),然後查看更多通用文件,直到找到密鑰。我從所有這些中學到的主要內容是,擁有您在源代碼管理中進行管理的所有配置是非常有幫助的。 – GlennS 2011-01-07 14:00:44

回答

0

如果代碼中使用該配置項是您管理代碼/可改變(以及所有在託管代碼空間/ C#中運行)我會考慮將調用設置的方法調用移植到類似單例的類中,並且至少有一個GetString()方法。 (可以看看.Net XML序列化的東西 - 美國人拼出一個'z':序列化)...對很多東西很有用,但也因爲這意味着你可以開始打包將相關的配置項目轉換爲商店中的單個條目。

關於使用單個存儲(具有緩存訪問的數據庫表)或僅使用新的配置門面來封裝配置項的存儲位置 - 這取決於您...我強烈希望每個產品部署使用一個存儲進行配置,因爲那樣你總是知道在哪裏看以及在哪裏做出改變。所有的Web服務引用(WCF或其他)都可以使用運行時提供的字符串來構建和調用......:)

在緩存鍵的值方面 - 我使用我自己的內存緩存(對於較小的應用程序),因爲棧上的開銷是可管理的......類似於memcache的東西可能在這裏工作(配置存儲通過TCP訪問/網絡的地方)......

編輯 喜歡的東西上:

public class ConfigurationStore 
{ 
    private static ConfigurationStore _instance = null; 

    public static ConfigurationStore Instance { 
     get { 
     if(_instance == null) 
     { 
      _instance = new ConfigurationStore(); 
     } 

     return _instance; 
     } 
    } 

    public string GetValue(string key) 
    { 
     .... 
    } 

    public Object GetObject(string key) 
    { 
     ... 
    } 
} 
0

您可以考慮看着楠腳本自動化與一些自定義的.NET工具來操縱配置按鍵組合。

2

無論你走到哪裏,我認爲對於你的配置有一個單一的「真相源」的概念可能是有價值的。

複製是好的,如果你需要提供配置給他們自己的專門形式的一些組件。

但是爲了保持您的理智,我認爲您應該嘗試並設法在一個位置設置與您的應用程序相關的所有配置,然後提供一個定義良好的機制,將其轉換爲Web.config中的條目,以及任何其他配置機制,你必須支持。

根據支持合作伙伴的技能水平(不管他們是否會破壞XML),我想你可能還想提供一個GUI實用程序,讓他們在這個「真相源」配置中旋轉所有旋鈕文件,用「應用」去運行變換/更新代碼,以對Web.config &朋友進行必要的更改。

然後,爲了管理您針對不同站點/客戶的配置,理論上您有一個配置文件需要管理。

注意:在ASP.NET 4.0中,將提供構建時配置轉換機制(請參閱http://blog.hmobius.com/post/2010/02/17/ASPNET-40-Part-4-Config-Transformation-Files.aspx),這可能使此任務更容易。看起來你可以使用這個與非web項目的一些黑客(見http://philbolduc.blogspot.com/2010/03/using-config-transforms-outside-web.html)。但是,如果您需要在部署時進行這些更改,則可能會遇到編寫自定義工具的問題,儘管看起來XDT轉換可能是適合您的方式,因爲您希望成爲能夠添加/更新/刪除項目。

相關問題