IRequiresSessionState和IReadOnlySessionState應用上的一些差異

風靈使發表於2019-01-08

在呼叫ashx時,如果需要應用Session,則必須繼承介面IRequiresSessionState,IReadOnlySessionState,但根據字面,可以知道IRequiresSessionState可對Session進行所有操作,IReadOnlySessionState只能對Session進行只讀操作

假設場景:有頁面Test.aspx以及一般處理程式Requires.ashxReadOnly.ashxRequires.ashx繼承IRequiresSessionStateReadOnly.ashx繼承IReadOnlySessionState,兩者的ProcessRequest方法內都只有一段程式碼System.Threading.Thread.Sleep(1000))Test.aspx分別有一段js通過ajax非同步的方式呼叫Requires.ashxReadOnly.ashx

活動場景1:對Requires.ashx同時進行2次ajax非同步訪問,通過FireBug監測時間,可以發現第一個Requires.ashx的執行時間為1秒,第二個Requires.ashx的執行時間為2秒,第二個Requires.ashx的處理時間比第一個多1倍
活動場景2:對ReadOnly.ashx同時進行2次ajax非同步訪問,通過FireBug監測時間,可以發現第一個ReadOnly.ashx的執行時間為1秒,第二個ReadOnly.ashx的執行時間為1秒,兩者處理時間相同

可以得出結論,在繼承IRequiresSessionState時,為保證Session的正確性,asp.net內部機制會保證同一次會話期間,在第一個ashx執行完畢前,不會執行第二個ashx;而繼承IReadOnlySessionState時,因為Session是隻讀不變的,所以asp.net不需要對Session的正確性進行控制,無論多少個請求,只要IIS能處理,就會同時處理多少個請求

相關文章