Почему событие Session_End не возникает, когда StateProvider не является InProc? - PullRequest
5 голосов
/ 25 июня 2009

Я задаю этот вопрос из любопытства.

Я заметил это в моем global.asax

void Session_End(object sender, EventArgs e)
{
    // Code that runs when a session ends. 
    // Note: The Session_End event is raised only when the sessionstate mode
    // is set to InProc in the Web.config file. If session mode is set to StateServer 
    // or SQLServer, the event is not raised.
}

Я хочу понять, почему событие Session_End не регистрируется / вызывается, когда режим сеанса - StateServer или SQLServer?

Ответы [ 2 ]

9 голосов
/ 25 июня 2009

потому что Состояние сеанса ASP.NET его больше нет в памяти ...

при использовании другого процесса для сохранения состояния сеанса * IIS не знает (поскольку он не связан, состояние сеанса больше не поддерживается IIS), когда сеанс заканчивается ...

это особенно потому, что таймауты я никогда не пробовал, но происходит ли это событие, когда вы программно вызываете Session.Abandon () ??

2 голосов
/ 25 июня 2009

Событие Session_End поддерживается только диспетчером сеансов InProc:

События состояния сеанса ASP.NET (MSDN)

"Событие Session_OnEnd поддерживается только когда режим состояния сеанса свойство установлено в InProc, который по умолчанию. Если режим состояния сеанса это StateServer или SQLServer, то Событие Session_OnEnd в Global.asax файл игнорируется Если состояние сеанса Режим установлен на Custom, затем поддержка для события Session_OnEnd определяется пользовательским состоянием сеанса Поставщик магазина. "

В этой статье объясняется, как использовать HttpModule для эмуляции этой функции:

ASP.NET HttpModule для обработки завершения сеанса с помощью StateServer (CodeProject)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...