簡體   English   中英

使用數據庫保存應用程序設置

[英]Using the database to hold application settings

我正在研究如何使我們的應用程序更易於擴展和更容易操作,而無需更改web.config(或者,在我們的例子中,包含appsettings節點的application.config文件)。

我想到的一種方法是將應用程序設置保留在具有sqlcachedependancy的數據庫表中。 這意味着:

  • 每次在數據庫中更改設置時,緩存都將失效,並再次檢索設置,從而實時更新應用程序,而無需更改文件並重新啟動整個應用程序。
  • 我們可以創建一個自定義工具,允許我們更改設置。

我認為它的缺點是,這可能會導致嚴重的邏輯問題,如果你有一些東西在流程開始時檢查一個appsetting,然后它改變了一半,你最終會無意中改變流程,就像否定了完整應用程序重啟的要求。

這有什么方法嗎?

有沒有更好的方法來管理appsettings,以便您可以一次性為一台,幾台或所有服務器遠程更改它們?

我想你已經把兩個主要的球員釘在了一起:

  • 您可以訪問文件系統,並將所有設置放在過多的* .config文件中

要么:

  • 你沒有訪問服務器的文件系統(或只有非常有限的訪問權限),因此你可能最好將配置設置和用戶首選項放在數據庫中,基本上只剩下連接字符串到磁盤上的配置文件

兩種方法都有其優點和缺點。 我一直在努力尋找一種從數據庫字段“實現”配置部分的方法,這樣我基本上只需使用配置XML,但存儲在數據庫字段中。 不幸的是,整個.NET 2.0配置系統被“鎖定”並且只假設數據來自文件 - 沒有辦法插入例如數據庫提供程序以允許配置系統從數據庫字段讀取其內容: - (太糟糕了!

我見過的唯一另一種方法是微軟提供的StockTrader 2.0示例應用程序中的“ConfigurationService”,但是對於我的需求,它感覺像是一種過度殺傷,就像一個非常復雜,非常重的子系統。

如果您引用包含appsettings的外部配置文件(將所有其他內容保留在正常的app.config中),那么我相信編輯它只會重新加載這些設置,它不會強制整個應用程序重新啟動。

這里有一個類似的問題: 嵌套的app.config(web.config)文件

WRT在程序執行過程中值的變化問題,我猜你可以在本地緩存值,並在它們發生變化時引發事件,允許例程在使用更新的值之前到達合適的點。

我認為在asp.net中我們可以免費獲得這個,因為每個頁面的生命周期都是不同的,所以這個值只是應用於新的頁面請求,而不是在執行過程中。

編輯:一點額外信息:

配置更改導致重新啟動應用程序域

來自MSDN

對Web.config文件中的配置設置的更改間接導致應用程序域重新啟動。 此行為是通過設計發生的。 您可以選擇使用configSource屬性來引用在進行更改時不會導致重新啟動的外部配置文件。 有關更多信息,請參閱由Section Elements繼承的General Attributes中的configSource。

有關System.Configuration命名空間中ConfigurationManager類的更多信息,可用於以編程方式修改配置文件(即,如果可以提供相關的磁盤讀取權限,則在自定義工具中)。 如果您堅持使用內置配置類,我認為更改外部配置不會導致應用程序重新啟動,但會引發您可以處理的事件(例如屬性已更改 ),以確保您的代碼不會被更改設置捕獲。

可以使用SQLite,它將是單個文件中的自包含數據庫。 一石二鳥?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM