3

получил странный вопрос для вас, основываясь на некоторых странных событиях на нашем сайте. У нас есть четыре .DLLs в нашем решении ASP.Net (т. Е. Управляемый код в папке/bin). Это утром мы обновили все четыре из них, сайт был протестирован и работал нормально.IIS7: AppDomain не перерабатывается, когда это необходимо?

Это днем ​​ Я загрузил новую версию одного из DLL, и он взял весь сайт вниз, к нашему ужасу. Я быстро поменял новую для старой, вернув сайт обратно в состояние, прежде чем я загрузил DLL, но сайт все еще был внизу. Мы были вынуждены перезагрузить весь сервер, но все равно радость: насколько нам известно, сайт был возвращен точно в том же состоянии, в котором он был, прежде чем я что-то загрузил, и он все еще не работал.

Итак, после небольшого расследования мы обнаружили, что это была ошибка в одном из библиотек DLL, которые были загружены, что утра (т.е. не связанные с DLL я загруженным во второй половине дня).

Мы обнаружили, что, по какой-то нечетной причине, AppDomain не правильно перерабатывал, когда мы загружали наши библиотеки по утрам. Некоторые изменения, внесенные на сайт, вышли в прямом эфире, но по крайней мере одна из DLL осталась в кэше вместо обновления.

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

У кого-нибудь еще была проблема с AppDomain, который не перерабатывается, когда он должен? Или, возможно, есть другое объяснение того, что это может быть? AFAIK AppDomain следует перерабатывать каждый раз, когда есть изменения, внесенные в любой файл в bin/folder ... Если да, то как он случайно кэшировал более старую версию файла и не перерабатывал надлежащим образом?

Вот Скотт Форсайт говорить о AppDomain переработки: http://weblogs.asp.net/owscott/archive/2006/02/21/ASP.NET-v2.0-2D00-AppDomain-recycles_2C00_-more-common-than-before.aspx

ответ

1

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

В большинстве мест, где я был лучшей практикой, всегда следует выдавать IISRESET после обновления файлов сайта. Это гарантирует, что после развертывания все будет переработано.

+0

Удивительный отклик, спасибо большое! Могу ли я спросить: как мы «выдаем» и IISRESET? Еще раз спасибо. –

+1

С веб-сервера перейдите в командную строку (если сервер 2008 года, он должен быть запущен как администратор) и введите «IISRESET». Это приведет к тому, что IIS сбрасывает все текущие транзакции и перерабатывает все. – NotMe

+0

В Google: просто перезагрузка IIS через диспетчер IIS делает то же самое, я думаю. Думал, что это возможно, но я хотел убедиться. Благодарю. –