Почему компиляция страницы MVC вызывает постоянные перезапуски приложения в моем веб-приложении Azure?

Мое предварительно скомпилированное веб-приложение Azure постоянно перезапускается, и я не могу понять, как это исправить.

Вот подробности:

  • Это веб-проект MVC 5, опубликованный как веб-приложение Azure.
  • .Net Framework v4.5.2
  • Причиной перезапуска является «BinDirChangeOrDirectoryRename» с этим сообщением: «Уведомление об изменении для критических каталогов. Изменение каталога bin или переименование каталога»
  • Я добавил FileSystemWatcher, чтобы выяснить, какие файлы меняются, и это всегда такие файлы, как «bin\App_Web_h2quortx.dll» и «bin\dailyentry.cshtml.c45ee28a.compiled».
  • В настройках публикации я выбрал параметр «Предварительная компиляция во время публикации», который, как я думал, предотвратит компиляцию страниц.
  • В конфигурации предварительной компиляции я пробовал разные варианты, но пока ничего не сработало.
  • Такое поведение не происходит сразу после публикации. Похоже, оно не отображается до тех пор, пока приложение не будет посещено после тайм-аута приложения.
  • Перезапуски происходят практически при каждом просмотре страницы, при первом просмотре страницы после перезапуска приложения.

Ваша помощь очень ценится. Спасибо!


person Scott Reece    schedule 12.01.2017    source источник
comment
Вы проверили тайм-аут простоя пула приложений? Если в течение определенного периода времени нет запросов, пул простаивает, затем он перезапускается, когда поступает какой-либо запрос.   -  person Fals    schedule 12.01.2017
comment
Спасибо за ваш ответ, но проблема не в том, что время ожидания пула приложений истекло. Проблема в том, что после перезапуска после тайм-аута он снова динамически компилирует страницы, что приводит к немедленному перезапуску приложения. Этого не должно происходить, потому что он должен был быть предварительно скомпилирован.   -  person Scott Reece    schedule 13.01.2017
comment
на одном сервере несколько сайтов? у вас на сервере установлен антивирус? Ваши взгляды генерируются динамически?   -  person Parv Sharma    schedule 09.04.2017
comment
использует ли ваш веб-сайт удаленный общий доступ к файлам для удовлетворения веб-запросов?   -  person Parv Sharma    schedule 09.04.2017
comment
На этом сервере есть только 1 веб-сайт. Там ничего не установлено, есть PAAS, и нет возможности установить что-то вроде антивируса... Нет ничего лучше удаленного общего доступа к файлам. Используем REDIS, ELASTIC DB, MVC   -  person Cyril Iselin    schedule 09.04.2017
comment
вам также следует изучить эту проблему, здесь может быть какая-то помощь github.com/OrchardCMS/Orchard/issues /6526   -  person Parv Sharma    schedule 09.04.2017
comment
Вы пытались добавить информацию о приложении, чтобы увидеть, где ваши зависимости могут вызывать проблему тайм-аута зависания? Если ваши представления перекомпилируются, вы можете проверить, не изменился ли в файле вашего проекта параметр для ‹MvcBuildViews›false‹/MvcBuildViews›.   -  person    schedule 12.04.2017


Ответы (2)


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

Как причина вашей ошибки, похоже на изменение файлов и Уведомления об изменении файлов

  1. Убедитесь, что в вашем коде App_Start нет ничего, что могло бы изменить основные файлы в веб-приложении. Например, WebConfig, App_Data и т. д.

  2. Попробуйте отключить уведомления об изменении файлов

    <httpRuntime fcnMode="Disabled" />
    

Это свойство находится в разделе configuration->system.web.

** - Обратите внимание, что по какой-то причине я не могу полностью ввести XML-разметку здесь, в поле для ответа.

person Parv Sharma    schedule 09.04.2017
comment
Спасибо за ответ, я тоже читал про fcnMode=Disabled, для меня это звучит как хак?! =› Интересно, что я не могу подтвердить, что нашел файлы, которые были изменены после публикации. Я проверил это с помощью: var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, bin); var dirInfo = новая информация о каталоге (путь); FileInfo[] files = dirInfo.GetFiles().OrderByDescending(p => p.LastWriteTime).Take(3).ToArray(); - person Cyril Iselin; 09.04.2017
comment
(в app_data ничего нет, мы читаем только значения из web.config) - person Cyril Iselin; 09.04.2017
comment
попробуйте отключить режим fcn. если это решит вашу проблему, мы хотя бы на шаг приблизимся к распознаванию проблемы - person Parv Sharma; 09.04.2017
comment
Похоже, это исправит. Как я могу узнать, что является основной причиной (...)? - person Cyril Iselin; 09.04.2017
comment
Точно зная, какие файлы вызывают перезагрузку. - person Parv Sharma; 09.04.2017
comment
Поэтому мы никогда ничего не записываем в файловую систему, только Redis Cache или Elastic Database. Как вы можете видеть в моем посте ниже, я пытаюсь выяснить, какой файл вызывает такое поведение, но ни один из этих файлов не изменен. - person Cyril Iselin; 09.04.2017
comment
Попробуйте найти все файлы, даже те, которых нет в папке bin. - person Parv Sharma; 10.04.2017

==> Предоставление дополнительной информации:

Журнал: Уведомление об изменении для важных каталогов. bin изменение каталога или переименование каталога HostingEnvironment инициировал завершение работы Уведомление об изменении для критических каталогов. bin изменение каталога или переименование каталога Уведомление об изменении критических каталогов. изменение каталога bin или переименование каталога HostingEnvironment вызвало отключение

Чтобы получить «эмитент», я написал в Application_End следующее:

var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin");
        var dirInfo = new DirectoryInfo(path);
        FileInfo[] files = dirInfo.GetFiles().OrderByDescending(p => p.LastWriteTime).Take(3).ToArray();
        foreach (var item in files)
        {
            Log.Info("FILE: " + item.FullName + " | " + item.LastWriteTime);
        }

**LastWriteTime всегда является одной и той же датой, поэтому **я не могу подтвердить наличие каких-либо изменений !?****

Я также регистрирую StackTrace:

at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo) at System.Environment.get_StackTrace() at System.Web.Hosting.HostingEnvironment.InitiateShutdownInternal() at System.Web.Hosting.HostingEnvironment.InitiateShutdownWithoutDemand() at System.Web.HttpRuntime.ShutdownAppDomain(String stackTrace) at System.Web.HttpRuntime.OnCriticalDirectoryChange(Object sender, FileChangeEvent e) at System.Web.FileChangesMonitor.OnCriticaldirChange(Object sender, FileChangeEvent e) at System.Web.DirectoryMonitor.FireNotifications() at System.Web.Util.WorkItem.CallCallbackWithAssert(WorkItemCallback callback) at System.Web.Util.WorkItem.OnQueueUserWorkItemCompletion(Object state) at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() at System.Threading.ThreadPoolWorkQueue.Dispatch() at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Изменить: Спасибо за ваш комментарий, я изменил код в app_end на:

var dirInfo = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
        FileInfo[] files = dirInfo.GetFiles("*.*", SearchOption.AllDirectories).OrderByDescending(p => p.LastWriteTime).Take(3).ToArray();
        foreach (var item in files)
        {
            Log.Info("FILE: " + item.FullName + " | " + item.LastWriteTime);
        }

Он всегда отображает одни и те же 3 *.compiled файла, но LastWriteTime равно дате публикации, так что же вызывает "изменение каталога bin или переименование каталога"?

person Cyril Iselin    schedule 09.04.2017
comment
пожалуйста, добавьте это к своему вопросу вместо добавления ответа - person Parv Sharma; 09.04.2017
comment
это не мой вопрос :(, просто такая же проблема. - person Cyril Iselin; 09.04.2017
comment
домен приложения также может перезапускаться при любом изменении файла для некоторых папок даже за пределами корзины. - person Parv Sharma; 09.04.2017