Обновите свойство константы ограничения программно в Swift?

Я знаю, что этот вопрос старый, но я хотел опубликовать ответ, основанный на текущем состоянии дел в мире ASP.NET \ IIS, в сочетании с моим опытом в реальном мире.

Недавно я возглавил проект в моей компании, где я хотел консолидировать и управлять всеми приложениями & amp; connectionStrings в наших файлах web.config в одном центральном месте. Я хотел продолжить подход, когда наши настройки конфигурации были сохранены в ZooKeeper из-за того, что проекты зрелости и amp; стабильность. Не говоря уже о том, что ZooKeeper представляет собой конфигурацию и amp; приложение для управления кластерами.

Цели проекта были очень простыми:

  1. передают ASP.NET для связи с ZooKeeper
  2. в Global.asax, Application_Start - вытащите настройки web.config из ZooKeeper.

Получив техническую часть получения 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. Если что-либо изменит этот ответ, я соответствующим образом обновлю ответ.

37
задан Cesare 8 April 2017 в 07:47
поделиться