jQuery Ajax - 针对ASP.NET MVC运行多个请求

时间:2011-02-01 14:05:40

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

我有一个'标签'样式的网页,一旦页面加载每个标签,就会触发对其内容的Ajax请求(使用jQuery)。后端是在Visual Studio中运行的ASP.NET MVC,因此只需使用正常的“ASP.NET开发服务器”来处理请求。我遇到了以下问题:

1)请求由Web服务器逐个处理。第一个请求在第一个请求完成之前不会处理。这是在单线程模式下运行的'ASP.NET Development Server'吗?我可以让它多线程(我应该让它多线程还是会打开一个痛苦的世界?)

2)长时间运行的请求会终止后续请求。即使我一次性关闭ajax请求,也会一次一个地处理请求,为什么会有一些请求甚至没有到达网络服务器?一旦长期请求得到服务,就会发生这种情况。例如:

  • 第一次请求(小额请求) - 响应好的
  • 第二次请求(大号 请求) - 响应需要一分钟或 所以,但得到了服务。
  • 第3次请求 (小要求) - 永远不要求 到达服务器,jQuery做到了 不报告错误。

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


更新 我在我的代码中发现了一个错误,它弄乱了最终请求的URL,所以看起来这与请求长度和aj​​ax超时(blush!)无关。一路上虽然我找到了有用的ajaxManager插件,如果你需要的话,它非常适合排队请求(http://www.protofunc.com/scripts/jquery/ajaxManager/)。另外,感谢有关使用ASP.NET Dev Server进行测试的有效观点。它确实与IIS完全不同。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

当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");
    
       }
    
    }