Использование .NET ConfigurationManager для чтения настроек из строки вместо файла app.config

Мы запускаем несколько экземпляров нашей службы (реализованных в виде файла .exe) на разных машинах в нашем центре обработки данных. Однако мы хотели бы хранить параметры конфигурации для этого файла .exe в центральном месте (а не в файле .exe.config для каждой машины).

Для этого мы планируем переместить содержимое файлов .exe.config в атрибут в центральном репозитории (Active Directory или SQL) и запустить .exe на всех машинах, считываемых из этого репозитория.

Я хотел бы повторно использовать все существующие классы, используемые для чтения / записи информации о конфигурации (с использованием ConfigurationManager, ConfigurationProperty и т. Д., В основном с использованием всей инфраструктуры .NET Configuration), однако вместо загрузки ее из файла .exe.config (что он делает по умолчанию - я хочу, чтобы он загружал его из строкового значения большого двоичного объекта XML, который я буду извлекать из этого центрального репозитория.

Я пытался найти способы сделать это с помощью ConfigurationManager API, но не смог найти ничего, что могло бы загрузить раздел конфигурации из строки. Есть указатели?


person Nadeem Khan    schedule 20.03.2012    source источник
comment
Вам нужен другой SettingsProvider. Вот образец одного, который должен дать достаточно подсказок о том, как реализовать свой собственный: msdn.microsoft.com/en-us/library/ms181001%28v=vs.90%29.aspx   -  person Hans Passant    schedule 20.03.2012


Ответы (2)


Я полагаю, вы могли бы написать свой собственный ConfigurationSection, который затем загрузите реальные данные конфигурации из вашего центрального репозитория.

В качестве альтернативы, есть ли у вас какая-то централизованная система развертывания для установки программного обеспечения на различных серверах? Как развертывается ваш сервис? Вместо того, чтобы усложнять свое программное обеспечение, вам следует искать существующие инструменты, которые уже решают вашу проблему.

person Andrew Kennan    schedule 20.03.2012
comment
Спасибо Андрею за комментарий. Повторное использование существующей инфраструктуры - это именно то, к чему мы стремимся. Наши двоичные файлы развертываются в нашем производственном центре обработки данных с помощью централизованного сценария. В настоящее время мы развертываем файлы .exe и .exe.config на компьютерах наших центров обработки данных. Проблема в том, что не существует централизованного способа управления конфигурацией .exe, и мы не хотим повторно развертывать файлы .exe.config повсюду каждый раз, когда мы хотим изменить конфигурацию. Кроме того, в коде конфигурации уже используется раздел конфигурации .NET. - person Nadeem Khan; 22.03.2012

Хотя я сомневаюсь, что это именно то, для чего он был предназначен, мы сделали это в нашем проекте, используя ProtectedConfigurationProvider. По сути, этот класс должен позволить вам зашифровать ваш файл конфигурации, но у нас просто есть метод Decrypt, подключенный к нашей базе данных и возвращающий информацию о конфигурации. См. this для примечаний по реализации. Это выглядело немного взломанным, но мы не могли найти другого способа без полного переписывания всей логики анализа конфигурации.

person Mike Zboray    schedule 20.03.2012