Как бы вы централизовали конфигурацию нескольких проектов?

У меня есть решение примерно с 10 проектами с конфигурацией только для чтения. Это веб-приложения, службы Windows, консольные приложения и т. Д. Все проекты, кроме одного, находятся на одном сервере. В каждом проекте есть 3 среды - dev, test и production. Итак, существует 30 различных наборов конфигурации, каждый из которых имеет приличное количество настроек. Громоздко поддерживать единообразие конфигурации для каждого приложения и среды.

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

Как бы вы подошли к централизации конфигурации для нескольких проектов?


person HAL9000    schedule 31.08.2010    source источник


Ответы (4)


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

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

person Corbin March    schedule 31.08.2010
comment
Откуда-то это припоминаю;) Отличный ответ! - person Tj Kellie; 02.09.2010

Вы, безусловно, можете настроить службу WCF, которая имеет простую операцию для получения параметров конфигурации, принимая приложение и среду в качестве параметра; затем вы могли бы заставить службу загрузить правильную конфигурацию из файла и вернуть ее вызывающей стороне. Было бы неплохо создать вложенные файлы конфигурации, чтобы общие настройки определялись только один раз на их самом общем уровне.

Потенциальная проблема может возникнуть, если служба WCF не работает при запуске одного из ваших приложений - вам нужно будет решить, есть ли по умолчанию конфигурация / кеширование предыдущей копии для этой ситуации, или если вы просто не разрешаете приложениям запускаются, если они не могут подключиться.

Еще одна вещь, которую следует учитывать, - это преимущество файлов .config в .NET в том, что при их изменении приложение может реагировать; вам может потребоваться служба обратного вызова WCF, которая уведомляет клиентов, если их конфигурация была обновлена ​​на центральном сервере, чтобы они могли запросить новую копию и обновить себя при необходимости.

person Guy Starbuck    schedule 31.08.2010
comment
Вы подняли некоторые вещи, о которых я не задумывался, с помощью подхода WCF. Я поддержал ваш ответ. - person HAL9000; 01.09.2010

Поскольку они (почти) все находятся на одном сервере, вы можете рассмотреть возможность предоставления значений по умолчанию в machine.config и / или центральном web.config файлах. Обычно я не фанат использования / изменения этих файлов, но они есть ... в \Windows\Micsrosoft.NET\Framework<version>\Config\

person Henk Holterman    schedule 31.08.2010
comment
Неплохой вариант. Если бы у меня были серверы, я бы использовал machine.config. Я работаю в крупной организации, и мы стараемся, чтобы сборки сервера были очень простыми. - person HAL9000; 31.08.2010

Вы можете использовать централизованный сервер конфигурации, например Lygeum, который позволяет управлять приложениями и средами через веб-консоль или команду Линейный интерфейс с модулем управления пользователями и клиентами, в вашем случае клиентами могут быть веб-приложения, консольные службы или что-то еще. Установка сервера проста через докер.

person Jordane    schedule 17.02.2020