2014-03-26 81 views
0

我目前有一個問題,我發送一個異步AJAX請求到.NET控制器,以便開始數據庫搜索。這個請求將它傳遞給啓動搜索的服務器,並立即(不到一秒)用搜索ID回覆回調,此時我開始每隔10秒發送一次Ajax請求以檢查搜索是否完成。此方法正常工作,並已成功通過多個用戶發送同時請求進行測試。HTTP請求不擊中控制器

如果我把第一次搜索結束前相同用戶的第二搜索請求,此調用不會使它的控制端點,直到第一次搜索完成後,這可能需要長達一分鐘。我可以在開發工具中看到請求離開chrome(或FF/IE),並使用Fiddler作爲代理,我可以看到請求點擊應用程序正在運行的計算機,但是它不會觸及第一行的斷點直到第一次調用返回之前。

在該呼叫被阻塞點,通常有至多從瀏覽器3個的未決請求。 IIS或.NET架構是否有一些排隊請求的機制?或者,如果沒有,請求離開代理和進入控制器之間還有什麼?我在如何調試這個方面有點不知所措。

回答

0

我能夠找到問題。事實證明,儘管我的端點是異步定義的,ASP.NET控制器默認按會話進行同步。因此,雖然我的端點能夠跨會話同時執行,但在同一會話中,一次只允許一個呼叫。我能夠通過將控制器SessionState屬性設置爲只讀來解決此問題,從而允許我的呼叫不受阻塞地通過。

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]