使用.NET ConfigurationManager从字符串中读取设置,而不是从app.config文件中读取设置
我们正在数据中心的不同机器上运行我们服务的多个实例(作为.exe文件实现)。但是,我们希望将此.exe文件的配置参数存储在中央位置(而不是在每台计算机的.exe.config中)。使用.NET ConfigurationManager从字符串中读取设置,而不是从app.config文件中读取设置
为此,我们计划将.exe.config文件的内容移至中央存储库(Active Directory或SQL)中的属性,并使所有机器上的.exe运行在从此存储库读取的所有机器上。
我想重复使用所有用于读取/写入配置信息的现有类(使用ConfigurationManager,ConfigurationProperty等,基本上使用整个.NET配置框架) - 但是,而不是从.exe.config文件中加载它(这是默认情况下 - 我希望它从我将从中央存储库中检索的XML blob的字符串值加载它。
我试图找到使用ConfigurationManager API的方法,但无法' t找到任何可以从一个字符串加载配置部分的东西。任何指针?
我想你可以编写自己的ConfigurationSection wi然后从你的中央仓库加载真实的配置数据。
或者,您是否有某种集中式部署系统来安装各种服务器上的软件?你的服务如何部署?您应该寻找已经解决您的问题的现有工具,而不是增加软件的复杂性。
感谢Andrew的评论。尽可能多地重复使用现有的基础设施是我们的目标。我们的二进制文件通过集中式脚本发布到我们的生产数据中心。目前,我们在数据中心机器上部署.exe和.exe.config文件。问题是没有中央的方法来控制.exe的配置,我们不想在每次想要更改配置时都重新部署.exe.config文件。 此外,配置代码已经利用了.NET配置部分。 – 2012-03-21 21:13:56
尽管我怀疑这是它的用意,但我们在使用ProtectedConfigurationProvider的项目中已经完成了这项工作。基本上,这个类应该允许你加密你的配置文件,但我们只需要将Decrypt方法连接到我们的数据库并返回配置信息。有关实施的说明,请参阅this。这感觉有点冒险,但是如果不完全重写所有配置解析逻辑,我们就找不到其他任何方式。
您需要一个不同的SettingsProvider。有一个示例,应该提供足够的关于如何实现自己的提示:http://msdn.microsoft.com/en-us/library/ms181001%28v=vs.90%29.aspx – 2012-03-20 01:56:51