7

在考慮downvoting或告訴我「google it」之前,請仔細閱讀該問題。這是舊的/經典的問題,但舊的/經典的解決方案不再有效。這是非常簡單的場景在Visual Studio二千零十五​​分之二千零十三重現:ASP.NET MVC 5個併發請求即使被禁用也會排隊

1)使用MVC模板創建ASP.NET Web應用程序: enter image description here enter image description here

2)打開控制器\ HomeController.cs並添加屬性控制器和 「睡眠」 行動:

[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)] 
public class HomeController : Controller 
{ 
    public ActionResult Sleep(int? time) 
    { 
     System.Threading.Thread.Sleep(time ?? 3000); 
     return Content("OK"); 
    } 

    public ActionResult Index() 
    { 
... 

3)打開文件:使用以下視圖\首頁\ Index.cshtml並添加/替換內容的HTML:

<script> 
 
    function ReqClick() { 
 
     var startTime = Date(); 
 

 
     $.ajax("/Home/Sleep") 
 
     .success(function() { 
 
      var log = $("#log"); 
 
      var endTime = Date(); 
 
      log.text(log.text() + "Start: " + startTime.toString() + " === " + endTime.toString()); 
 
     }); 
 
    }; 
 
</script> 
 

 
<button type="button" onclick="ReqClick();"> 
 
    Request 
 
</button> 
 
<div> 
 
    <textarea id="log" style="width:640px; height:480px"></textarea> 
 
</div>

4)運行它(如果你使用IIS或IIS Express或Vs的開發服務器)並不重要 - 打開首頁/索引。點擊F12打開開發工具,打開網絡選項卡。在主頁上點擊兩次「請求」按鈕。你可以看到,第二個請求需要近6秒時:

enter image description here

enter image description here

在控制器調試模式下,你可以看到,會議爲空:

enter image description here

Cookies是完全空(ASP.NET Session ID不存在) enter image description here

請讓我知道我錯過了什麼?

添加以下web.config中的設置不起作用或者:

<sessionState mode="Off"/> 
<pages enableSessionState="ReadOnly"/> 
+0

如果您使用的東西就像[Fiddler](http://www.telerik.com/fiddler)調用服務器方法一樣,您會注意到請求在客戶端而不是服務器上排隊。您的服務器端代碼確實允許多個請求,這是瀏覽器將它們排隊。嘗試使用Fiddler中的Composer來創建您的測試請求。 –

+0

更多的證據是如果你在你的ajax請求中設置'cache:false'。 –

+0

我沒有得到任何延遲。問題在於你本地。該代碼適用於我。無論多次請求,每次請求3秒鐘。 – rism

回答

2

我花了很多時間在這個問題上,發現很多的,你看到的上面也沒有信息糾正問題。我的並行請求總是排隊,我在Internet Explorer和Firefox中看到了這一點。

我發現這篇文章涉及到我使用MVC應用程序this article

,這說明你可以使用禁用[SessionState(SessionStateBehavior.Disabled)],而不是將其設置爲只讀的。

我將執行AJAX GET調用的代碼移到了它自己的控制器上,因爲我在當前控制器中使用Session的其他代碼通過TempData。這糾正了我的問題,並且我的$.get()調用禁用會話的控制器將與使用會話的其他控制器的$.post()並行處理。

+0

嗨。我的用例有點不同。我希望後面的請求不會排隊,但是根本就沒有成功。你能幫我做到嗎? –

2

併發並行請求工作對我來說,當我飾我的控制器與此屬性

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

它比上述禁用會話狀態更好,加回在MVC 3 More info here

+0

在vs2010上爲我解決 – jefissu

相關問題