2011-03-29 29 views

回答

12

如果您有一個無會話控制器,那麼您將能夠同時處理來自同一瀏覽器實例的請求。否則,ASP.NET會在收到請求時排隊請求,以便爲它們順序訪問ASP.NET Session對象,以避免死鎖問題或其他競爭條件。

實際上,您可以同時向'Session-ful'控制器發出1個請求,並向'Session-less'控制器發送多個請求。這種模式對於我實現一個長時間運行的流程(通過一個'Session-ful'AsyncController實現),通過AJAX調用從客戶端到一個'Session-less'控制器來提供用戶更新服務器的長期運行過程。

11

總之一句話:可伸縮性。如果你完全不使用會話,這意味着你的應用程序是無狀態的,這非常棒。在網站場景中,您只需投擲另一臺服務器,即可準備好處理網站的新負載。您也可以使用進程外會話(如SQLServer或StateServer),會話將在服務器場的所有節點之間共享,但是此狀態服務器會成爲整個站點的明顯單點故障。

會話還有另一個問題:因爲會話不是線程安全的,如果對同一會話有兩個並行請求(認爲是AJAX調用)寫入會話的控制器動作,這兩個請求將簡單地排隊並執行順序。

+0

+1 aha沒有想到這一點。奇怪的是,當我輸入我的(已刪除)答案時,我錯誤地認爲ViewState = S – gideon 2011-03-29 06:53:10

相關問題