Как предотвратить перезапуск приложения ASP.NET при изменении web.config?

Я использую среду выполнения ASP.NET с помощью метода ApplicationHost.CreateApplicationHost . Когда я web.config во время работы приложения, я вижу много первого ThreadAbortException . Это прямо перед тем, как мое приложение рушится. Я предполагаю, что это связано с тем, что среда выполнения обнаружила изменения в конфигурации и хочет перезапустить.

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

Кто-нибудь знает как это сделать?

Насколько мне известно, нет способа отключить это поведение, изменения в webconfig заставляют приложение перезапускаться.

Обновление: на самом деле это возможно, существует ряд методов, хорошо документированных, как объясняется в этом ответе *

Оригинальный ответ:

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

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

Из этой статьи MSDN

* Отказ от ответственности: я написал другой ответ и, как правило, не стал самонаблюдением, но считаю его достаточно релевантным для ссылки здесь, поскольку через 8 лет после этого сообщения это действительно совсем другое: решение очень просто, щелкнув по фронту IIS -end и обходные пути существуют с ASP.NET 1.0.

Я столкнулся с еще более серьезной проблемой в тех же строках – изменения в любом файле или подпапке в базовом каталоге AppDomain приводят к отключению среды хостинга. Это довольно большая проблема для нашего приложения, так как мы используем интерфейс WPF в том же AppDomain, и мы не можем его перезапустить, не будучи недопустимым для пользователя.

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

Поэтому я написал ужасный ужасный взлом для решения проблемы. Я думал, что отправлю его здесь как потенциальное решение для всех, у кого есть такая же проблема. Вам просто нужно вызвать HttpInternals.StopFileMonitoring() чтобы отключить выключение при изменении файла / папки.

 internal static class HttpInternals { private static readonly FieldInfo s_TheRuntime = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static); private static readonly FieldInfo s_FileChangesMonitor = typeof(HttpRuntime).GetField("_fcm", BindingFlags.NonPublic | BindingFlags.Instance); private static readonly MethodInfo s_FileChangesMonitorStop = s_FileChangesMonitor.FieldType.GetMethod("Stop", BindingFlags.NonPublic | BindingFlags.Instance); private static object HttpRuntime { get { return s_TheRuntime.GetValue(null); } } private static object FileChangesMonitor { get { return s_FileChangesMonitor.GetValue(HttpRuntime); } } public static void StopFileMonitoring() { s_FileChangesMonitorStop.Invoke(FileChangesMonitor, null); } } 

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

Способ 1 (в широком масштабе)

Измените DWORD реестра DWORD для HKLM\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\FCNMode на значение 1 , которое отключит все уведомления об изменении файла.

Не путайте местоположение: Wow6432Node в данном случае не влияет на биттичность вашего веб-приложения.

Способ 2 (.NET 4.5+)

Если вы используете .NET 4.5, теперь можно отключить его на уровне каждого сайта , просто используйте в своем web.config :

  

Способ 3 (IIS6 +)

Наконец, а также (по крайней мере) с IIS6, существует параметр DisallowRotationOnConfigChange как параметр только для пула приложений (по крайней мере, это то, что я думаю, что текст в MSDN пытается сказать, но я его не тестировал). Установите значение true и изменения конфигурации пула приложений не приведут к немедленной переработке.

Этот последний параметр также можно установить из дополнительных настроек пула приложений:

Отключить переработку для изменения конфигурации

Метод 4 (ASP.NET 1.0 и 1.1)

Для (старых) веб-сайтов, использующих ASP.NET 1.0 или 1.1, есть подтвержденная ошибка, которая может вызвать быстрые и повторяющиеся повторы при изменении файла. Обходной путь в то время был похож на то, что MartinHN предложил по основному вопросу, а именно следующее в вашем web.config :

  

Это не отключает рециркуляцию, но это происходит только после 5000 перекомпиляций. Является ли это число полезным, зависит от размера вашего приложения. Microsoft не ясно говорит, что такое перекомпиляция . Однако по умолчанию 15 .

В стороне: независимо от версии .NET или Windows, мы обнаруживаем, что когда приложение запускается из общего ресурса и используется в среде с балансировкой нагрузки, сайт постоянно перерабатывается. Единственный способ решить эту проблему – добавить параметр FNCMode к реестру (но теперь есть более мелкие варианты).

Решением будет добавление следующего элемента в раздел web.config:

  

Как упоминалось jfburdet, решение заключается в использовании waitChangeNotification и maxWaitChangeNotification.

При этом вы должны знать, что они не работают на IIS 7, если ASP.NET запускается в смешанном режиме: http://forums.iis.net/t/1149344.aspx

  • Как я могу использовать Web.debug.config на встроенном сервере отладки визуальной студии?
  • Плюсы и минусы AppSettings vs applicationSettings (.NET app.config / Web.config)
  • Вложенное приложение ASP.NET в IIS, наследующее родительские настройки конфигурации?
  • Как вы изменяете настройки приложения web.config во время выполнения?
  • Ошибка аутентификации при отладке VS2013 - iis express
  • Разрешить анонимную проверку подлинности для одной папки в web.config?
  • Настройка перенаправления в файле web.config
  • Измените web.config программно с помощью C # (.NET)
  • Использовать преобразование web.config Visual Studio для отладки
  • Раздел конфигурации «system.web.extensions» не может быть прочитан, потому что отсутствует объявление раздела
  • Как добавить амперсанд для значения в файле конфигурации приложения ASP.net/C#
  • Давайте будем гением компьютера.