我在ASP.NET 2.0上遇到了一個非常奇怪的問題。我正在使用的系統使用會話變量來存儲參數(如問題和答案)以生成報告。這些是具有相同名稱的類的實例,因此它們使用如下參數進行填充:ASP.NET會話意外終止
此報告通過4個aspx頁面生成。首先定義位置和日期參數,第二頁存儲問題,第三存儲回答。最後的顯示鏈接到Excel和HTML格式的生成報告。 所有變量數據都存儲在會話中,並且一切都很順利,直到最後一頁時,如Session.Abandon()發生,Session_End事件被觸發並且所有變量都丟失。這種情況每天只發生一次,對於每個記錄的用戶首次使用報告,然後您可以嘗試整整幾十次,而不會再看到它。
問題發生在同一頁面總是,會話模式是InProc。
我已經做了以下驗證:
- 經過,如果有任何Session.Abandon()或Session.Clear()命令。沒有了。
- 檢查會話超時時間設置爲18分鐘,問題隨時發生,無論您在18分鐘內使用了多長時間。
- 選中的表單超時,在認證下。它也被設置爲18分鐘。
- 據我瞭解,有一個與Server.Transfer的(),它有時可能會刷新視圖狀態和,並與Response.Redirec()
- 監測了由行代碼會行了,一切順利的話換成了一個bug,當頁面完全加載時,它就會死亡。所有變量都消失了,但會話仍在工作。
- 就我而言,IIS已正確配置。我無法訪問它,但所有其他系統都能正常工作。
- 也分析了一些上述系統,尋找可能發生的事情的一些線索,但他們的web.config文件與我遇到的問題非常相似,沒有實現與會話交互的特殊代碼不同。
- 也想過監視IIS的應用程序重新啓動,但我敢肯定,它不超過默認限制15.儘管如此,我沒有訪問IIS服務器,並在我的計算機上完成的所有測試使用ASP。 NET開發服務器。這兩個問題都會發生。
- 已檢查過程回收的可能性,如.config和asax文件更改,更改/ bin目錄,都不會發生。
以下限制:
- 不能改變會議模式比InProc方式另因公司政策。
- 報告生成「過程」是通過4頁創建的。我不同意這一點,但由於時間和預算的限制,無法重做。
任何想法或解決方案都很有幫助。我會保持聯繫的任何更新和必要的測試。
您是否有權訪問探查器機制?當專用於w3wp的內存量超過machine.config中指定的內存量時,我們遇到了會話刷新問題。 ASP.NET性能計數器幫助我們調試了很多。 –
我們不使用machine.config文件。據我所知,這個文件是廣泛的網站,並會影響IIS上同一網站下的其他應用程序。公司的服務器基礎架構將同一網站下的所有系統應用於虛擬目錄。 –
你可以發佈代碼來顯示session_end在什麼時候被觸發嗎?你用什麼來生成報告?檢查你是否意外地默默地處理任何異常(例如在application_error中)。 (如果報告的內容是第三方運行該頁面而沒有看到它是否仍然存在)。 – Jeroen