【问题标题】:jQuery Ajax - Running multiple requests against ASP.NET MVCjQuery Ajax - 针对 ASP.NET MVC 运行多个请求
【发布时间】:2011-02-01 14:05:39
【问题描述】:

我有一个“选项卡式”样式的网页,一旦页面加载,每个选项卡都会触发对其内容的 Ajax 请求(使用 jQuery)。后端是在 Visual Studio 中运行的 ASP.NET MVC,因此只需使用普通的“ASP.NET 开发服务器”为请求提供服务。我遇到以下问题:

1) 网络服务器一次处理一个请求。在第一个请求完成之前,不会处理第二个请求。这是以某种单线程模式运行的“ASP.NET 开发服务器”吗?我可以让它成为多线程的(我应该让它成为多线程的还是会打开一个痛苦的世界?)

2) 长时间运行的请求会杀死后续请求。 鉴于即使我一次触发所有 ajax 请求,请求也一次被处理,为什么有些请求会甚至无法到达网络服务器?一旦处理了长请求,就会发生这种情况。例如:

  • 第一个请求(小请求)- 回复正常
  • 第二次请求(大 request) - 响应需要一分钟或 所以但确实得到了服务。
  • 第三次请求 (小请求)- 从不请求 到达服务器并且 jQuery 确实 不报错。

我尝试增加 ajax 超时但没有成功。


更新: 我在我的代码中发现了一个错误,它弄乱了最终请求的 URL,所以看起来这与请求长度和 ajax 超时无关(脸红!)。一路走来,虽然我发现了有用的 ajaxManager 插件,如果这是您需要的,它非常适合排队请求(http://www.protofunc.com/scripts/jquery/ajaxManager/)。另外,感谢有关使用 ASP.NET 开发服务器进行测试的有效观点。确实和IIS有很大的不同。

【问题讨论】:

  • 附注。首先,不要在 Capistrano(Visual Studios 开发服务器)中对您的应用程序进行性能测试。它做了很多 IIS 在生产模式下不做的事情。其次,第一个请求比另一个请求花费更多时间,因为必须编译您的项目(IIS 也是如此)。
  • @alexn 我想那是卡西尼
  • @Omu 是的,需要更多咖啡 :)

标签: .net jquery asp.net-mvc ajax


【解决方案1】:

关于第 1 点,请记住,如果您使用会话状态,则请求不会同时执行 - ASP.NET 将锁定会话状态,并且一次只处理使用它的每个请求。 (有关更多信息,请参阅http://msdn.microsoft.com/en-us/library/ms178581 中的“并发请求和会话状态”部分)尝试禁用会话状态(当然,如果您不使用它!)看看是否有帮助。

【讨论】:

  • 所以如果一个请求使用 Session["a"] 而另一个使用 Session["b"] 他们不能同时工作?
  • 我们正在使用会话状态,所以这是一个非常有用的评论。我可以看到会话状态如何处理线程问题。谢谢。
  • @Omu - 是的,如果它们用于同一个会话,那是正确的 - 即使它们是会话中的不同对象也没关系。
【解决方案2】:

当 ASP.NET 看到来自同一用户的两个或多个请求(通过检查他们的 SessionID)并且会话标记为读和写时,它将执行第一个请求并将所有其他请求排队,这样只有一个请求会同时从同一个用户执行。所以我们可以说这些请求是序列化的。 要使您的请求同时执行,您需要将会话标记为禁用或只读。

例如。如何在应用程序级别禁用会话状态:

protected void Application_BeginRequest()
{

   if (Request.Cookies["ASP.NET_SessionId"] != null)

   {

       Request.Cookies.Remove("ASP.NET_SessionId");

   }

}

如果您想允许少数控制器的并发请求并希望为其他控制器维护会话。我们可以过滤掉以下条件:在下面的示例中,我只为控制器禁用会话,即“并发”。所有其他控制器将保持会话。

protected void Application_BeginRequest()
    {
    
       if (Request.Url.AbsoluteUri.ToLower().Contains("Concurrent") && Request.Cookies["ASP.NET_SessionId"] != null)
    
       {
    
           Request.Cookies.Remove("ASP.NET_SessionId");
    
       }
    
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多