我們有一個MVC.NET應用程序,它在重新啓動時遇到致命錯誤。在我們的Session_Start事件處理程序中,我們將會話ID添加到字典中。在Session_End處理程序中,我們將其刪除。考慮請求的順序如下:ASP.NET MVC應用程序爲單個會話多次觸發Session_Start
GET home.mvc
<應用程序重新啓動>
GET的main.css
GET banner.jpg
GET somedata.mvc
...
由於應用程序的架構方式,如果在瀏覽器窗口中打開應用程序時執行重建,則這種順序發生的頻率相當高。除非我在生產環境中看到它,否則這不會非常令人擔憂。例如,編輯web.config時會發生(儘管很少)。
重新啓動後的請求全部歸因於主頁中的鏈接或來自JavaScript的AJAX調用。
我觀察到.NET並行處理前5個請求。每個這樣的請求都會導致它觸發Session_Start事件。短時間後,它會觸發Session_End事件3次。要清楚,每個Session_Start對應於完全相同的會話。它們都具有相同的會話ID,IsNewSession屬性對於所有會話狀態對象都是true。另外,Session_End事件而不是對應的會話正在被終止。會話持續存在,以及存儲在會話狀態中的任何數據。
我需要阻止它多次觸發Session_Start,或者想出如何判斷Session_End何時並不意味着會話已經結束。
你需要處理什麼?你是說你的字典和asp.net的內部字典有差異嗎?你在什麼時候發現這種差異? – 2010-07-30 17:41:56
字典是存儲在應用程序變量還是會話變量中? – 2010-07-30 19:38:02
字典是一個應用程序變量。 – 2010-07-30 20:24:46