ImageResizer перезапускает пул приложений

У нас возникла проблема, когда пулы приложений перезапускаются (и теряют все сеансы) при удалении папки в виртуальном каталоге. Это не ошибка ImageResizers, а ASP.NET. Мы не можем воспроизвести проблему на статическом веб-сайте.

Мне интересно, решил ли кто-нибудь эту проблему? Мы думаем о создании отдельной веб-страницы только для ImageResizer и содержимого изображений. Может есть более простой способ?

Это решение нам не помогло: http://www.aaronblake.co.uk/blog/2009/09/28/bug-fix-application-restarts-on-directory-delete-in-asp-net/


person Tony Gustafsson    schedule 05.03.2015    source источник


Ответы (2)


IIS и ASP.NET — оба — имеют независимые FileSystemWatcher. Если их отключить, проблема должна исчезнуть.

См. http://imageresizing.net/docs/howto/avoid-network-limit для получения дополнительной информации.

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

Я также предлагаю избегать удаления папок на веб-сайтах ASP.NET; это болезненная цель, и, скорее всего, она не удастся из-за блокировки чтения. Хорошо, удаление папки редко работает в Windows, даже если оно не является частью веб-сайта, который активно обслуживается клиентами.

person Lilith River    schedule 05.03.2015
comment
Спасибо за информацию! Да, в этом случае проблема заключается только в наблюдателе за файлами ASP.NET. Я попытался изменить FCNMode в реестре, как сказано в ссылке. Когда я установил для него значение 1, я получил сообщение об ошибке: [NullReferenceException: ссылка на объект не указывает на экземпляр объекта.] System.Object.GetType() +0 XXXX.Application_Start (отправитель объекта, EventArgs e) +289 Когда я установил это на 2 нет изменения (это просто один процесс вместо нескольких, если я правильно понял). Я также попытался добавить ‹httpRuntime fcnMode=Disabled /› в web.config (новое с .NET 4.5), но с тем же результатом. - person Tony Gustafsson; 06.03.2015
comment
Возможно, вы правы... просто удалить каталоги в IIS не представляется возможным. Вероятно, мы просто перестанем их удалять и создадим задание на удаление, которое будем выполнять вручную, когда серверы будут вне кластера. - person Tony Gustafsson; 06.03.2015
comment
Я только что попробовал метод linkd/junction, описанный тут и там в Интернете, но он не работает для удаленных папок. Я пробовал и linkd.exe, и junction.exe (даже если кажется, что они делают одно и то же). - person Tony Gustafsson; 06.03.2015
comment
Не могли бы вы открыть еще один вопрос об исключении NullReferenceException? Это то, чего я раньше не видел. - person Lilith River; 07.03.2015
comment
Хорошо, теперь я попробовал отключить fcnMode, и это не решило нашу проблему. Однако удаление папок, похоже, сработало: P Я не полностью удовлетворен этим решением - теперь мы должны очистить каталог с помощью сценария powershell и убедиться, что очищенный сервер находится вне кластера. - person Tony Gustafsson; 11.03.2015
comment
Теперь я могу подтвердить, что сайт перестал перезагружаться, когда мы перестали удалять папки. Я думаю, нам нужно привыкнуть к некоторым пустым папкам и удалять их с помощью powershell, когда они находятся вне кластера. - person Tony Gustafsson; 19.03.2015

Кажется возможным использовать приложение IIS вместо виртуального каталога и использовать другой пул приложений для архива изображений. Я попробовал, и проблема была решена... вместо этого перезапустился этот пул приложений, что не повлияло на веб-пул. Огромный успех!

Однако я не думаю, что мы будем это делать. Кажется, что приложению IIS нужна собственная папка bin. Мне пришлось скопировать библиотеки DLL для изменения размера изображения здесь. Мне также пришлось написать еще один файл global.asax для автоматических изображений 404 в Application_Start. Это работает ... Я просто не хочу, чтобы в каталоге изображений было много кода. Он синхронизируется от третьего лица.

person Tony Gustafsson    schedule 19.03.2015