C# 使用可配置值

C# 使用可配置值,c#,.net,web-services,configuration,app-config,C#,.net,Web Services,Configuration,App Config,背景:我正在使用一个应用程序套件,该套件由连接的(客户机-服务器)子系统和断开的(基于消息的服务)子系统组成。套件中的每个子系统都有自己的配置文件。到目前为止,这些配置在应用程序目录中单独维护 问题:由于我们对it的要求是动态的,因此这些配置文件的维护变得难以控制(这是我们应该能够在一天/一周/一个月的特定时间切换/更新配置条目以调整系统行为的要求的一部分) 问题:是否有更好的方法或经验证的实践来整合配置以实现更好的可管理性,同时又不失去所需的动态特性 目前已尝试: 以下是我们迄今为止尝试过的解

背景:我正在使用一个应用程序套件,该套件由连接的(客户机-服务器)子系统和断开的(基于消息的服务)子系统组成。套件中的每个子系统都有自己的配置文件。到目前为止,这些配置在应用程序目录中单独维护

问题:由于我们对it的要求是动态的,因此这些配置文件的维护变得难以控制(这是我们应该能够在一天/一周/一个月的特定时间切换/更新配置条目以调整系统行为的要求的一部分)

问题:是否有更好的方法或经验证的实践来整合配置以实现更好的可管理性,同时又不失去所需的动态特性

目前已尝试:

以下是我们迄今为止尝试过的解决方案列表(我们在Srl 4)。不确定这是否是解决我们问题的最好办法

  • 如前所述,特定于应用程序的本地配置。这很有效 好吧,但无法解决列出的任何问题

  • 配置存储在数据库中,并作为配置加载到应用程序中 内存中的对象。这就解决了合并问题。但需要重新启动单个系统,以便在发生更改时获取最新的配置值

  • 我们无法重新启动服务(SRL2下列出的问题),因此使用每2分钟刷新内存中对象的策略实现了轮询。这很好,但无论是否有任何更改,轮询过程都会继续每2分钟刷新一次缓存

  • 为了避免不必要的轮询(Srl 3中列出的问题),我们实现了配置版本控制。这有助于我们避免在配置没有更改的情况下刷新数据


  • 数据库方法可能有其优点,您是否探讨过将SQLServerServiceBroker与ExternalActivator结合使用的选项?您可以使用更新后触发器发送一条消息,该消息将有效地触发数据库外部的一些应用程序代码。它有很多活动部件,但我认为它可以变得非常坚固。这篇帖子可能会有所帮助:@mars red,谢谢你的评论。在我们的例子中,我们需要与不同的数据库系统进行交互,包括sql server、MySql和mogoDb,最终的想法是替换sql server。所以你的建议看起来很有希望。但我不能走那条路,因为我们要去的方向。我明白。通过MSMQ连接到各个子系统的定制配置服务怎么样?该服务可以负责“监视”中央配置存储库(文件系统、轻量级数据库或其他)。这听起来是唯一可能让你做得比你已经尝试过的更好的事情。当然,它要求MSMQ在所有环境中都可用(在这些环境中,配置的使用寿命以及各种子系统的使用寿命)。当然,访问远程队列确实需要注意安全问题。@mars red,您的解决方案听起来很合理。我唯一关心的是使用需要配置值的服务/应用程序时的延迟。这可能是非常微不足道的时间,但不确定。在我们的简单术语中,配置的值应该是使用它的系统的一部分(内部依赖),而不是依赖(外部依赖)。有了这个解决方案,我们所有的服务都有一个需要担心和管理的依赖关系。其次,所涉及的工作量可能比我们目前的解决方案要多。所以我怀疑这个世界是否会成为我们的解决方案。对不起,我帮不上什么忙。