1. 程式人生 > >同一頁面多個ajax請求後臺堵塞問題

同一頁面多個ajax請求後臺堵塞問題

有個小夥子告訴我,一個頁面上同時開啟多個ajax,向後臺請求資料,會被堵塞。 “因為是同一個會話。但如果在控制器上加上這個特性就可以了”,小夥子說。

    //session只讀,避免同一會話中session鎖導致請求阻塞
    [SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
    public class CxController : BaseLT.Web.UserControllerBase
    {
    。。。。
    }

經測試,還真是。如果沒有這個特性,多個ajax請求到了後臺,原本是併發的,結果變成了佇列,一個接一個地完成。如果加上,則是並行完成。 箇中原因,可以看以下參考資料:

ASP.net Session阻塞、Session鎖、MVC Action請求阻塞問題

HttpSessionState來自於HttpModule的SessionStateModule。在每次請求處理過程中,HttpApplication的請求的處理管道中會檢查當前請求的處理程式是否實現了介面IRequiresSessionState,如果實現的話,那麼SessionStateModule將為這個請求分配HttpSessionState。同時SessionStateModule還負責SessionID的生成、Cookieless會話管理、從外部狀態提供程式中檢索會話資料以及將資料繫結到請求的呼叫上下文。 如果頁面請求設定一個讀取器鎖定,同一會話中同時處理的其他請求將無法更新會話狀態,但是至少可以進行讀取。如果頁面請求為會話狀態設定一個寫入鎖,那麼所有其他頁面都被阻止,無論他們是否要讀取或寫入內容。例如,如果同時有兩段程式檢視在同一個Session中寫入內容,一段程式必須等到另一段程式完成後才能寫入。在AJAX程式設計中,必須注意這種情況的發生。

我只想說,後生可畏。