IIS6: Когда пул приложений переработан, Session_End называют?

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

5
задан Jonathan Allen 29 March 2010 в 18:39
поделиться

2 ответа

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

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

3
ответ дан 14 December 2019 в 19:08
поделиться

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

То есть при нормальных обстоятельствах, следует отметить, что событие session_end не гарантированно сработает (существуют очень специфические сценарии, в которых этого не произойдет), я думаю, что сейчас это в основном связано с аварийными экземплярами IIS или приложения. Пул перезагружается при OOM или ошибках. Раньше это было, если вы не использовали только один из типов сеансов (я считаю, что сервер состояний), он не будет надежно срабатывать. Теперь все может быть по-другому.

Если вам нужно гарантировать освобождение ресурсов, я не уверен, что session_end - подходящее место для этого. Можете ли вы поднять его до кэша приложений или HTTP-кеша и использовать уникальные ключи сеанса с периодическими событиями очистки? Это могло бы быть более надежным (больше кода), но более надежным.

По моему общему опыту, session_end срабатывает достаточно надежно, но я видел, как он терпит неудачу при значительной нагрузке (100 ударов в секунду), и я знаю, что когда вы начинаете говорить о серверных фермах, все становится намного сложнее.

1
ответ дан 14 December 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: