2013-04-03 1 views
4

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

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

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

  2. подтвердил, что событие Session_End не срабатывает, когда я называю Session.Abandon() или при сеанс прерывается.

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

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

EDIT: Я также подтвердил, что я хранение данных в сессии - я использую несколько переменных сеанса для хранения различных точек данных, и эти экземпляры, когда пользователь входит в приложение ,

EDIT: Я также подтвердил, что я не создаю сеанс, а затем оставляю его в том же запросе. Как отмечалось выше, проблема существует даже тогда, когда сеанс заканчивается (т. Е. Не выполняется запрос).

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

ответ

1

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

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

T

+0

Спасибо, Тамас. Да, я использую довольно много переменных сеанса в этом приложении, поэтому я определенно сохраняю данные в сеансе. – Octavient

0

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

+0

Как вы выяснили, что код был ошибкой? – ArtK

+0

Я передал несколько простых сообщений журнала в текстовый файл (временно). – Octavient

0

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

1

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

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

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