В режиме состояния сеанса только режим, который поддерживает событие Session_OnEnd - PullRequest
1 голос
/ 18 сентября 2009

Я прочитал две статьи MSDN о режимах состояния сеанса в ASP .Net. 1 и 2 .

В обеих статьях показано, что режим состояния сеанса «В процессе» является единственным режимом, который поддерживает событие Session_OnEnd. Если режимом состояния сеанса является StateServer или SQLServer, то событие Session_OnEnd в файле Global.asax игнорируется. Если для режима состояния сеанса установлено значение Пользовательский, то поддержка события Session_OnEnd определяется настраиваемым поставщиком хранилища состояний сеанса.

Может ли кто-нибудь сообщить мне причину, по которой он игнорирует событие Session_OnEnd для режимов StateServer или SQLServer?

Ответы [ 2 ]

1 голос
/ 18 сентября 2009

Я думаю, что производительность - это главная проблема. Во всех режимах, кроме режима InProc, есть несколько веб-серверов, отвечающих на запросы, и 1 сервер (возможно, кластеризованный SQL), обрабатывающий состояние.

Теперь, кто будет отвечать за тайм-аут? Это должен был быть государственный сервер, но мы хотим обременять этот сервер как можно меньше. И это потребовало бы, чтобы сервер состояний передавал данные на (случайный) веб-сервер, для всего остального, что он опрашивается. Я сомневаюсь, что в настоящее время сервер состояний даже хранит список веб-серверов, им это не нужно. Итак, просто для события SeesionEnd необходимо добавить сложную систему для администрирования мониторинга WebServers.
Добавьте к этому сложность отслеживания того, действительно ли выбранный сервер завершил событие, и все это становится очень непривлекательным.

1 голос
/ 18 сентября 2009

Режимы StateServer и SQL Server работают в конфигурации, в которой они могли бы обслуживать N клиентов в сценарии балансировки нагрузки и должны были бы поддерживать этот список и отправлять сообщения через процесс / компьютер для сигнализации Session_OnEnd. InProcess знает, что Session управляется в том же процессе, что и приложение, поэтому отправка обратного вызова одному слушателю является простой и присущей .NET Framework. Если вам это не нравится, вы можете написать свой собственный обработчик, но помните о каваетах.

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