使用数据库保存应用程序设置

时间:2009-09-11 10:38:09

标签: c# asp.net database web-config appsettings

我正在研究如何使我们的应用程序更易于扩展和更容易操作,而无需更改web.config(或者,在我们的示例中,包含appsettings节点的application.config文件)。

我想到的一种方法是将应用程序设置保留在具有sqlcachedependancy的数据库表中。这意味着:

  • 每次在数据库中更改设置时,缓存都会失效,并再次检索设置,从而实时更新应用程序,而无需更改文件并重新启动整个应用程序。
  • 我们可以创建一个自定义工具,允许我们更改设置。

我认为这可能会导致严重的逻辑问题,如果你有一些东西可以在流程开始时检查一个appsetting,然后它会在中途发生变化,你最终会无意中改变流程flow,因为取消了完整应用程序重启的要求。

有没有办法解决这个问题?

是否有更好的方法来管理appsettings,以便您可以一次性为一台,多台或所有服务器远程更改它们?

3 个答案:

答案 0 :(得分:4)

我认为你已经确定了两个主要参与者:

  • 您可以访问文件系统,并将所有设置放在多个* .config文件中

OR:

  • 您无法访问服务器的文件系统(或访问权限非常有限),因此您可能最好将配置设置和用户首选项放在数据库中,基本上只需要将连接字符串留给配置文件在磁盘上

这两种方法各有利弊。我一直在努力寻找一种从数据库字段“实现”配置部分的方法,这样我基本上只需使用配置XML,但存储在数据库字段中。不幸的是,整个.NET 2.0配置系统被“锁定”并且只假设数据来自文件 - 没有办法插入,例如一个数据库提供程序,允许配置系统从数据库字段中读取其内容:-(真的太糟糕了!

我见过的唯一另一种方法是微软提供的StockTrader 2.0 sample app中的“ConfigurationService”,但是对于我的需求,它感觉像是一种过度的,就像一个非常复杂,非常重的子系统。

答案 1 :(得分:2)

如果您引用包含appsettings的外部配置文件(将所有其他内容保留在正常的app.config中),那么我相信编辑它只会重新加载这些设置,它不会强制整个应用程序重新启动。

这里有一个类似的问题: Nested app.config (web.config) files

WRT在程序执行过程中值的变化问题,我猜你可以在本地缓存这些值,并在它们发生变化时引发一个事件,允许例程在使用更新的值之前到达一个合适的点。

我认为在asp.net中我们可以免费获得这个,因为每个页面的生命周期都是不同的,所以这个值只是应用于新的页面请求,而不是在执行过程中。

编辑:一点额外信息:

配置更改导致重新启动应用程序域

来自MSDN

  

对Web.config文件中的配置设置的更改会间接导致应用程序域重新启动。此行为是通过设计发生的。您可以选择使用configSource属性来引用在进行更改时不会导致重新启动的外部配置文件。有关更多信息,请参阅由Section Elements继承的General Attributes中的configSource。

有关ConfigurationManager classSystem.Configuration namespace的更多信息,可用于以编程方式修改配置文件(例如,在自定义工具中,如果可以提供相关的磁盘读取权限)。如果您坚持使用内置配置类,我认为更改外部配置不会导致应用程序重新启动,但会引发您可以处理的事件(例如property changed),以确保您的代码不会被捕获通过更改设置。

答案 2 :(得分:2)

可以使用SQLite,它将是一个单独文件中的自包含数据库。一石二鸟?