Azure: можем ли мы проверить, существует ли параметр, прежде чем пытаться его прочитать? - PullRequest
2 голосов
/ 16 мая 2011

В настоящее время я использую RoleEnvironment.GetConfigurationSettingValue(propertyName), чтобы получить значение параметра, определенного в моем файле конфигурации WebRole (csdef + cscfg).Хорошо, звучит правильно.

Это хорошо работает, если параметр существует, но произошел сбой с исключением, если параметр не определен в csdef и cscfg.

Я переношу существующее приложение вAzure, который имеет много параметров конфигурации в web.config.В моем коде, чтобы прочитать значение параметра, я хотел бы проверить: если оно существует в конфигурации webRole (csdef + cscfg), я читаю его отсюда, в противном случае я читаю его с помощью ConfigurationManager из web.config.Это предотвратит миграцию всех настроек из моего web.config и позволит настроить их, когда приложение уже развернуто.

Есть ли способ сделать это?

Я не хочуинкапсулируйте GetConfigurationSettingValue в try / catch (и читайте из web.config, если я войду в catch), потому что это действительно уродливый способ (и в основном это неэффективно!).

Спасибо!

1 Ответ

3 голосов
/ 16 мая 2011

Обновление для 1.7 Azure SDK.Был представлен класс CloudConfigurationManager.Позволяет одному вызову GetSetting сначала просмотреть ваш файл cscfg, а затем вернуться к web.config, если ключ не найден.

http://msdn.microsoft.com/en-us/LIBRARY/jj157248

Pre 1.7 SDK Простой ответ - нет,(Что я знаю)

Более интересная тема - рассматривать конфигурацию как зависимость.Я обнаружил, что было бы полезно рассматривать параметры конфигурации как зависимость, так что реализация поддержки может со временем меняться.Эта реализация может быть подделкой для тестирования или чего-то более сложного, например, переключение с .config / .cscfg на реализацию базы данных для мультитенантных решений.

Учитывая эту оболочку конфигурации, вы можете написать этот TryGetSetting как внутренний метод для любого источника параметров конфигурации.Когда эта функция будет добавлена ​​в члены RoleEnvironment, вам нужно будет только изменить эту внутреннюю реализацию.

...