ASP.NET MVC和Ajax,并发请求?




asp.net-mvc asp.net-ajax (4)

AJAX新手在这里!
在我的ASP.NET MVC Web应用程序中,我的AJAX请求似乎正在进行批处理或排队,我不确定。
在上一个请求完成之前,似乎没有任何请求完成。
我如何获得独立返回的请求?
我不一定希望有人给我答案,但可能有一些链接指向可能有用的优秀教程或资源。 谢谢


ASP.NET将按会话enableSessionState处理请求,除非通过pages元素上的enableSessionState属性将会话配置为禁用或仅在web.config中读取。

由于这是一个页面设置,这不会影响MVC控制器,它们仍然会受到串行请求处理。

奇怪的是,即使禁用会话或设置为只读,我们仍然可以读取和写入会话数据。 它似乎只影响导致串行请求处理的会话锁定。

<system.web>
    <pages enableSessionState="ReadOnly"/>
</system.web>

Pages也可以具有enableSessionState属性,但这与MVC视图无关。

<%@ Page EnableSessionState="True" %>

好的并发请求更多依赖于浏览器,如果你开始假设10个并发请求到一个动作在Mozilla中使用AJax并且同样使用IE 8那么你会发现Mozilla有样式来触发一个请求等待它的响应然后触发第二个等等on ...对于这是一个接一个的基础,而在IE *这一次大约6个并发请求一次到服务器。

因此并发请求也取决于浏览器类型。


我正在扩展Lachlan Roche的答案,这是正确的。

ASP.NET框架将“单线程”处理Session范围 (全局资源)的请求,以防止一个请求干扰另一个请求。 在WebForms中,我认为您可以使用Page指令指定各个页面不使用Session,因此不需要像这样同步处理。

问题是在ASP.NET MVC中所有请求都使用Session ,因为它用于实现TempData。 正如Lachlan Roche指出的那样,您可以完全禁用会话状态,或者您可以根据具体情况处理此问题。

一个可能的解决方案可能是启动您自己的后台线程来处理任何长时间运行的代码,以便初始请求尽快“完成”。


自.NET Framework v3.0发布以来,您可以在SessionStateAttribute中使用“SessionStateBehavior”枚举:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class MyController : BaseController { }




jquery