Я знаю, что этот вопрос старый, но я хотел опубликовать ответ, основанный на текущем состоянии дел в мире ASP.NET \ IIS, в сочетании с моим опытом в реальном мире.
Недавно я возглавил проект в моей компании, где я хотел консолидировать и управлять всеми приложениями & amp; connectionStrings в наших файлах web.config в одном центральном месте. Я хотел продолжить подход, когда наши настройки конфигурации были сохранены в ZooKeeper из-за того, что проекты зрелости и amp; стабильность. Не говоря уже о том, что ZooKeeper представляет собой конфигурацию и amp; приложение для управления кластерами.
Цели проекта были очень простыми:
Получив техническую часть получения ASP.NET, чтобы поговорить с ZooKeeper, я быстро нашел и ударил стену с помощью следующего кода:
ConfigurationManager.AppSettings.Add(key_name, data_value)
Это утверждение было наиболее логичным, поскольку я хотел добавить новые настройки в коллекцию appSettings. Однако, как упоминал оригинальный плакат (и многие другие), этот кодовый вызов возвращает сообщение об ошибке, указывающее, что коллекция доступна только для чтения.
Проведя немного исследований и увидев все безумные способы, которыми люди работали над этой проблемой, я был очень обескуражен. Вместо того, чтобы отказаться от того, что казалось менее реалистичным сценарием, я решил вскочить и посмотреть, не хватает ли я чего-то.
С небольшим количеством проб и ошибок я обнаружил, что следующий код будет делать именно то, что я хотел;
ConfigurationManager.AppSettings.Set(key_name, data_value)
Используя эту строку кода, теперь я могу загрузить все 85 appSettings от ZooKeeper в моем приложении Application_Start.
Что касается общих утверждений об изменениях в web.config, запускающих переработку IIS, я отредактировал следующие параметры appPool, чтобы отслеживать ситуацию за кулисами;
appPool-->Advanced Settings-->Recycling-->Disable Recycling for Configuration Changes = False
appPool-->Advanced Settings-->Recycling-->Generate Recycle Event Log Entry-->[For Each Setting] = True
С этой комбинацией настроек, если этот процесс должен был вызвать перезагрузку appPool, запись записи журнала должна быть записана, а это не так.
Это приводит меня к выводу, что это возможно , и действительно безопасно загружать настройки приложений с централизованного носителя данных.
Следует отметить, что я использую IIS7.5 в Windows 7. Код будет развернут в IIS8 на Win2012. Если что-либо изменит этот ответ, я соответствующим образом обновлю ответ.