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

Asp.net mvc ASP.NET MVC和Ajax,并发请求?,asp.net-mvc,ajax,asp.net-ajax,jquery,Asp.net Mvc,Ajax,Asp.net Ajax,Jquery,阿贾克斯新手在这里 目前,在我的ASP.NET MVC web应用程序中,我的AJAX请求似乎正在成批处理或排队,我不确定。 在前一个请求完成之前,似乎没有任何请求完成。 如何获得独立返回的请求? 我不一定希望有人给我答案,但可能有一些链接到好的教程或资源,这可能会有所帮助。谢谢我建议在asp.net mvc中使用jQuery来满足您的ajax需求,我专门使用过它,而且非常简单 至于教程,我将看以下内容: 有很多选项可供选择,我还建议下载firebug,这样您就可以看到请求从页面异步启动,并查看

阿贾克斯新手在这里
目前,在我的ASP.NET MVC web应用程序中,我的AJAX请求似乎正在成批处理或排队,我不确定。
在前一个请求完成之前,似乎没有任何请求完成。
如何获得独立返回的请求?

我不一定希望有人给我答案,但可能有一些链接到好的教程或资源,这可能会有所帮助。谢谢

我建议在asp.net mvc中使用jQuery来满足您的ajax需求,我专门使用过它,而且非常简单

至于教程,我将看以下内容:

有很多选项可供选择,我还建议下载firebug,这样您就可以看到请求从页面异步启动,并查看它们是否启动以及返回的内容等


与另一方面一样,AJAX请求是异步的,不会排队,完成后都会独立返回,因此,如果您在firebug中观看,将很容易看到幕后发生的情况,并且在调试器被点击之前,ASP.NET将以每个会话为基础连续处理请求,除非通过pages元素上的属性在web.config中将会话配置为禁用或只读

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

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

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

页面也可以具有enableSessionState属性,尽管这与MVC视图无关

<%@ Page EnableSessionState="True" %>

我正在扩展拉克兰·罗氏的答案,这是正确的

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

问题在于,在ASP.NET MVC中,所有请求都使用Session,因为它用于实现TempData。正如Lachlan Roche所指出的,您可以完全禁用会话状态,也可以逐个处理


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

随着ASP.MVC 3的发布,您现在可以向控制器添加一个属性,将会话标记为只读,从而允许从同一客户端并发调用操作

无会话控制器支持:

无会话控制器是ASP.NET MVC 3中另一个伟大的新特性。使用无会话控制器,您可以轻松控制控制器的会话行为。例如,您可以将HomeController的会话设置为禁用或只读,从而允许单个用户并发执行请求。有关详细信息,请参阅和

-从

通过向控制器添加
SessionState(sessionStateBehavior.Disabled)
,运行时将允许您从同一浏览器会话并发调用多个操作

不幸的是,我不认为有一种方法可以标记一个操作,以便仅在调用该操作时禁用该会话,因此,如果您有一个控制器,其中一些操作需要该会话,而另一些操作不需要该会话,则需要将不需要的操作移动到单独的控制器中

在ASP MVC的更高版本中,您可以使用SessionState属性装饰各个控制器类

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

并发请求也更多地依赖于浏览器。如果您在Mozilla中使用AJax和IE 8对一个操作触发10个并发请求,那么您会发现Mozilla有一种风格,即触发一个请求等待响应,然后触发第二个请求,依此类推。。。因为这是一个接一个的基础,而在IE*中,每次向服务器发出大约6个并发请求


因此并发请求也依赖于浏览器类型。

自从.NET Framework v3.0发布以来,您可以使用SessionStateBehavior枚举和SessionStateAttribute:

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

请发布AJAX请求的代码和处理它的控制器操作。我没有否决这一点,但这并不准确:“AJAX请求是异步的,不会排队”。虽然客户端确实不会将它们排队,但实际上,当会话状态处于启用状态时,服务器会将它们排队。您可以通过参考下面的文章来实现自己的基于操作的会话管理。在ASP.NET MVC 5中不起作用。即使Session=null,并发请求仍然是连续的。请同时提及[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]@PhilippMunin,刚刚检查了它,该属性在asp.net mvc 4中对我有效。也应该在5分钟内完成。该属性已在版本3中重新添加。只是检查了它。在ASP.NET MVC 5中不起作用。即使Session=null,并发请求仍然是连续的。这和拉克兰·罗切斯·安迪的回答是一样的问题。此控制器属性适用于我:[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]