Лучший способ перезапустить сайт в IIS7, чтобы «обновить» конфигурацию Castle Windsor - PullRequest
4 голосов
/ 16 июня 2011

У меня есть серия сайтов ASP.NET, размещенных в IIS7.Я использую Castle Windsor для внедрения зависимостей, а данные конфигурации хранятся в файлах XML.

Я подумал, эй, это круто, я могу просто отредактировать файлы, чтобы переключиться на различные реализации моих интерфейсов.Я понял, что, поскольку Castle Windsor анализирует конфигурацию XML при создании экземпляра контейнера, мне нужно как-то перезапустить веб-сайт, чтобы «перезагрузить» Castle Windsor.

Это не так просто, как я думал.Я попытался щелкнуть правой кнопкой мыши по сайту в IIS и выбрать «Перезапустить», но это не меняет реализации.Странно, если я «остановлю» сайт, он больше не будет работать, но запустит его снова и продолжит в точности так же, как и раньше.

Я предполагаю, что перезапуск пула приложений будет работать, но так как это повлияет и на другие сайтыЯ не хочу этого делать.

Кто-нибудь может предложить способ полностью перезапустить приложение, не затрагивая другие сайты?

Ответы [ 4 ]

3 голосов
/ 17 июня 2011

Вы можете установить FileSystemWatcher для конфигурационных файлов замка, а для события обновления вы можете вызвать

HttpRuntime.UnloadAppDomain();

, что вызовет Application_end, поэтому при следующем поступающем запросе ваше веб-приложение / AppDomain будет перезапущено

2 голосов
/ 16 июня 2011

Хммм. Открытие и сохранение web.config делает свое дело. Кто-нибудь знает что-нибудь более элегантное? :)

2 голосов
/ 16 июня 2011

Вы можете поместить рассматриваемый веб-сайт в отдельный пул приложений и перезапустить его (учитывая ваши предположения о перезапуске пула приложений).

Таким образом, вы не сможете удалить другие сайты, о которых идет речь.

0 голосов
/ 17 июня 2011

Если эти настройки находятся в файле, отличном от web.config, то изменение их настроек не приведет к перезапуску приложения.

Если Castle Windsor не может быть каким-либо образом уведомлен об обновлении своих настроек во время выполнения, тогда единственной перезагрузкой конфигурации было «прикоснуться» к файлу web.config.

...