我目前使用 RoleEnvironment.GetConfigurationSettingValue(propertyName)
来获取 WebRole 配置文件 (csdef + cscfg) 中定义的设置的值。好的,听起来不错。
如果设置存在,则此方法效果很好,但如果 csdef 和 cscfg 中未定义该设置,则失败并出现异常。
我正在将现有应用程序迁移到 Azure,该应用程序在 web.config 中有许多配置设置。在我的代码中,要读取设置值,我想测试:如果它存在于 webRole 配置(csdef + cscfg)中,我从这里读取它,否则我使用 ConfigurationManager 从 web.config 读取它。 这将阻止从我的 web.config 迁移所有设置,并允许在应用程序已部署时自定义设置。
有办法做到这一点吗?
我不想将 GetConfigurationSettingValue
封装在 try/catch 中(如果我输入 catch,则从 web.config 中读取),因为这确实是一种丑陋的方式(而且大多数情况下它的性能效率不高) !)。
谢谢!
最佳答案
1.7 Azure SDK 更新。 引入了CloudConfigurationManager类。允许单个 GetSetting 调用首先在您的 cscfg 中查找,如果未找到 key ,则返回到 web.config。
http://msdn.microsoft.com/en-us/LIBRARY/jj157248
1.7 之前的 SDK 简单的答案是否定的。 (据我所知)
更有趣的主题是将配置视为依赖项。我发现将配置设置视为依赖项是有益的,这样支持实现就可以随着时间的推移而改变。该实现可能是假的测试或更复杂的东西,例如从 .config/.cscfg 切换到 Multi-Tenancy 解决方案的数据库实现。
有了这个配置包装器,您可以将 TryGetSetting 编写为内部方法,无论您的配置选项来源是什么。当此功能添加到 RoleEnvironment 成员时,您只需更改该内部实现。
关于configuration - azure : can we check if a setting exists before trying to read it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018138/