2013-04-03 98 views
4

我試圖讓一個數據庫事務在ASP.NET會話結束時執行(在Windows 2008 Server上的簡單WebForms應用程序中)。我意識到很多受訪者會建議不要依賴Session_End事件(正如我在Google搜索中發佈的關於該主題的一百個論壇帖子中所看到的)。請幽默我。ASP.NET Session_End event not firing

我做這些事情:

  1. 啓用在web.config中的會話狀態:<sessionState mode="InProc" cookieless="false" timeout="1" />

  2. 證實,當我打電話Session.Abandon的Session_End中不會觸發事件()或將會話超時。

  3. 確認會話在1分鐘後超時(如上配置)。

  4. 確認我不是試圖訪問任何請求或響應或服務器對象(我知道會默默地出錯)。

編輯:我也證實了我的數據存儲在會話 - 我使用一些會話變量來存儲不同的數據點,這些被實例化時,該應用程式的用戶登錄。

編輯:我也證實,我沒有創建會話,然後放棄它在相同的請求。如上所述,即使會話超時(即沒有請求),問題仍然存在。

請幫忙!

回答

1

如果您沒有保存任何內容到會話中,session_end將不會觸發。 如果您在第一個請求中將會話中的數據保存起來,並且在同一請求中調用放棄,則session_end也不會被觸發。

希望這會有所幫助!

牛逼

+0

謝謝,塔馬斯。是的,我在這個應用程序中使用了很多會話變量,所以我肯定會保存會話中的數據。 – Octavient

0

原來這次活動是射擊,但正在執行的代碼被悄悄示數了,因爲我沒有正確地訪問應用程序對象和我的一些App_Code文件類的(我仍不很不知道該怎麼做,但值得一個單獨的堆棧溢出問題)。

+0

你是怎麼知道代碼出錯的? – ArtK

+0

我將一些簡單的日誌消息傳遞給一個文本文件(暫時)。 – Octavient

0

嘗試從查詢數據庫的相同方法中初始化會話。在查詢數據庫之前執行此操作。

1

對於其他正在尋找解決方案並且找不到問題的答案,我已經看到一個項目的Global.asax是用引用文件後面的代碼定義的,但是在asax中定義的事件而不是。 cs文件。

在這種情況下,它會觸發Session_Start,但不會觸發Session_End,就好像它在查找引用的.cs文件中一樣。

通過刪除對文件後面的代碼的引用,Session_End按預期開始觸發。