我使用以下代碼來計算我的ASP.NET(2.0/3.5)應用程序(ASMX Web服務,遺留代碼)中當前打開的會話的數量,但如果它足夠長,計數停止匹配內置的性能計數器(我的計數較高,Session_End似乎有時不會被調用)。會議是InProc。我可能會錯過什麼?天真的ASP.NET會話計數錯誤
public class Global : System.Web.HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
Application["OpenSessionCount"] = 0;
}
protected void Session_Start(Object sender, EventArgs e)
{
Application.Lock();
Application["OpenSessionCount"] = (int)Application["OpenSessionCount"] + 1;
Application.UnLock();
/* Set other Session["foo"] = bar data */
}
protected void Session_End(Object sender, EventArgs e)
{
Application.Lock();
Application["OpenSessionCount"] = (int)Application["OpenSessionCount"] - 1;
Application.UnLock();
}
}
「只要使用性能計數器!」
是的,我只是問,因爲我很好奇我錯了什麼地方。
是否還有其他方法可讓會議結束?我不認爲有任何。 –
您可以使用javascript監視關閉瀏覽器事件,並使用Session.Abandon()rotine向註銷頁面發送請求。 [關閉事件示例](http://stackoverflow.com/questions/1631959/how-to-capture-the-browser-window-close-event) –
感謝里卡多的建議,但這是一個Web服務不是網絡應用程序,所以沒有瀏覽器事件。另外,因爲我已經更新了Session_End()中的計數,所以註銷(它調用Session.Abandon())和會話超時都會被照顧。我試圖找出什麼可能會結束一個會議,而不會調用Session_End。在更新計數之前Session_End中的異常可能會執行此操作,但更新幾乎是第一次認爲代碼執行的操作,所以我沒有看到可能發生異常的位置。 –