Событие ASP.NET Session_End не запускается

Я пытаюсь заставить транзакцию базы данных выполняться, когда заканчивается сеанс ASP.NET (в простом приложении WebForms на Windows 2008 Server). Я понимаю, что многие респонденты будут предлагать не полагаться на событие Session_End (как я прочитал в сотне постов на эту тему по запросу Google). Пожалуйста, порадуйте меня.

Я сделал эти вещи:

  1. Включено состояние сеанса в web.config: <sessionState mode="InProc" cookieless="false" timeout="1" />

  2. Подтвердил, что событие Session_End НЕ срабатывает, когда я вызываю Session.Abandon() ИЛИ, когда время сеанса истекло.

  3. Подтвердил, что сеанс истекает через 1 минуту (как настроено выше).

  4. Подтверждено, что я не пытаюсь получить доступ к каким-либо объектам Request или Response или Server (что, как я понимаю, приведет к сбою).

РЕДАКТИРОВАТЬ: Я также подтвердил, что я храню данные в сеансе - я использую несколько переменных сеанса для хранения различных точек данных, и они создаются, когда пользователь входит в приложение.

РЕДАКТИРОВАТЬ: Я также подтвердил, что я не создаю сеанс, а затем отказываюсь от него в том же запросе. Как отмечалось выше, проблема существует, даже когда время сеанса истекло (т.е. запрос не сделан).

Пожалуйста помоги!

4 ответа

Если вы ничего не сохраните в сеансе, session_end не сработает. Если вы сохраняете данные в сеансе в первом запросе и вызываете метод отмены в том же запросе, session_end также не будет запущен.

Надеюсь это поможет!

T

Для других, которые ищут решение и не находят ответа на этот вопрос, я видел случай, когда проект Global.asax был определен с кодом, на который ссылается файл, но события были определены в asax вместо файла.cs.

В этом случае он будет запускать Session_Start, но не Session_End, как если бы он смотрел в указанном файле.cs.

Удалив ссылку на код файла, Session_End начал запускаться, как и ожидалось.

Выясняется, что событие было запущено, но выполняемый код молча выдавал ошибку, так как я не получал должного доступа к объекту Application и некоторым из моих классов App_Code (что я до сих пор не знаю, как сделать, но стоит отдельного вопроса переполнения стека).

Попробуйте инициализировать сеанс из того же метода, который запрашивает базу данных. Сделайте это, прежде чем запрашивать базу данных.

Другие вопросы по тегам