Это из-за FileChangesNotifications.
Это происходит с ASP.NET 2.0. Когда вы удаляете какую-либо папку в приложении, она перезапускается . Вы можете увидеть это сами, используя
Мониторинг состояния ASP.NET .
Просто добавьте этот код в ваш web.config / configuration / system.web:
<healthMonitoring enabled="true">
<rules>
<add name="MyAppLogEvents" eventName="Application Lifetime Events" provider="EventLogProvider" profile="Critical"/>
</rules>
</healthMonitoring>
После этого проверьте Windows Log -> Application
.
Что здесь происходит:
При удалении папки, если есть какая-либо подпапка, Delete(path, true)
сначала удаляет подпапку. FileChangesMonitor достаточно знать об удалении и закрыть ваше приложение. Между тем ваш основной каталог еще не удален. Это событие из журнала:
1024 *
*
Delete()
не завершил свою работу, и, поскольку приложение закрывается, возникает исключение:
Если у вас нет подпапок в папке, которую вы удаляете, Delete () просто удаляет все файлы и эту папку, приложение тоже перезапускается, но вы не получаете любые исключения , потому что перезапуск приложения ничего не прерывает. Но все равно вы теряете все внутрипроцессные сеансы, приложение не отвечает на запросы при перезапуске и т. Д.
Что теперь?
Существуют некоторые обходные пути и настройки, чтобы отключить это поведение, Соединение каталогов , Отключение FCN с реестром , Остановка FileChangesMonitor с помощью Reflection (так как не существует открытого метода) , но все они, похоже, не правы, потому что там есть причина по FCN. Он следит за структурой вашего приложения , которая не является структурой ваших данных . Краткий ответ: разместите папки, которые вы хотите удалить за пределами вашего приложения. FileChangesMonitor не будет получать уведомлений, и ваше приложение не будет перезапускаться каждый раз. Вы не получите никаких исключений. Чтобы сделать их видимыми из Интернета, есть два способа:
Создайте контроллер, который обрабатывает входящие вызовы, а затем отправляет файлы обратно, читая из папки вне приложения (за пределами wwwroot).
Если ваш проект большой и производительность важнее всего, установите отдельный маленький и быстрый веб-сервер для обслуживания статического контента. Таким образом, вы оставите IIS его конкретную работу. Это может быть на той же машине (mongoose для Windows) или на другой машине (nginx для Linux). Хорошей новостью является то, что вам не нужно платить дополнительную лицензию Microsoft для установки статического сервера контента в Linux.
Надеюсь, это поможет.