Всегда ли необходим IIsreset при хранении моих настроек приложений Web.Config в отдельном файле? - PullRequest
2 голосов
/ 14 мая 2009

У меня есть приложение ASP.Net, в котором мой узел AppSettings из Web.Config xml хранится в отдельном файле.

Итак, мой Web.Config содержит это:

<appSettings file="AppSettings.config" />

Всякий раз, когда я меняю там настройку, мне нужно сделать iisreset, чтобы изменения вступили в силу. Другими словами, мои изменения в этом файле не обнаруживаются так же, как изменения в Web.Config.

Кто-нибудь знает, как я могу заставить эти изменения вступить в силу автоматически, как это происходит с Web.Config?

Спасибо!

Ответы [ 6 ]

3 голосов
/ 25 января 2012

Я знаю, что это старая тема, но кое-что добавить.

Если вы используете:

<appSettings file="AppSettings.config" />

Тогда изменения во внешнем файле не будут доступны, пока не будет внесено изменение в файл web.config или не будет выполнен перезапуск.

Но если вы измените это на:

<appSettings configSource="AppSettings.config" />

Изменения этих настроек доступны в вашем коде сразу же без перезапуска или изменения web.config.

Я только что подтвердил, что это случай повторяющегося теста.

3 голосов
/ 14 мая 2009

Редактировать: В ответ на другие ответы. Вы можете изменить machine.config, включив параметр restartOnExternalChanges = "true" для appSettings; однако это приведет к перезапуску ВСЕХ ваших веб-приложений при касании любого из файлов настроек внешнего приложения. (Кроме того, я думаю, что это может работать только при использовании configSource = "file.name", а не file = "file.name".)

Это сделано специально, и единственный способ вызвать сброс приложения - вручную или с помощью скрипта.

Вы можете посмотреть здесь скрипт, который сбросит ваше приложение без перезапуска iis:

http://weblogs.asp.net/jgalloway/archive/2006/06/01/Avoid-IISRESET-in-ASP.NET-applications-_2800_added-bonus_3A00_-ASPRESET_2900_.aspx

2 голосов
/ 14 мая 2009

Как вы получаете доступ к настройкам своего приложения в коде? У меня есть внешний файл appsettings (хотя я использую свойство configSource вместо file), и любые изменения, которые я делаю, сразу же становятся доступны при использовании в коде ConfigurationManager.AppSettings("settingname") для получения значения.

С учетом вышесказанного, если вам действительно нужен перезапуск приложения по какой-либо другой причине, и у вас есть доступ к файлу machine.config на сервере, в определении раздела appSettings есть атрибут с именем RestartOnExternalChanges это может быть установлено в true (по умолчанию false), и тогда раздел appSettings будет вести себя так, как вы хотите, я полагаю.

2 голосов
/ 14 мая 2009

Откройте web.config в блокноте. Сохрани это. Выход из блокнота.

1 голос
/ 14 мая 2009

Вы можете написать filewatcher сервис для мониторинга вашего пользовательского файла конфигурации. Выполните команду iisrest, когда измененное событие будет выполнено внутри службы.

0 голосов
/ 21 ноября 2011

Если вместо этого вы используете ConfigurationRedirection (представленный в IIS 7), вы можете настроить IIS для запроса изменений в вашем внешнем файле конфигурации (начиная с IIS 7.5). Это будет охватывать весь файл .config, а не только раздел appSettings.

Это позволяет хранить параметры конфигурации на сервере UNC, к которому могут получить доступ все компьютеры веб-сервера в веб-ферме.

...