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

相关问题