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

AJAX新手在这里!
目前,在我的ASP.NET MVC Web应用程序中,我的AJAX请求似乎正在批处理或排队,我不知道。
在前一个请求完成之前,似乎没有任何请求正在完成。
我如何去请求独立返回?
我不一定希望有人给我的答案,但也许一些良好的教程或资源,可以帮助一些链接。 谢谢

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

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

问题是在ASP.NET MVC中,所有请求都使用Session ,因为它用于实现TempData。 你可以完全禁用会话状态,正如Lachlan Roche指出的,或者你可以在个案的基础上处理这个问题。

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

除非通过页面元素上的enableSessionState属性将会话configuration为禁用或仅在web.config中进行读取,否则ASP.NET将按每个会话连续处理请求。

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

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

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

页面也可以有一个enableSessionState属性,尽pipe这与MVC视图无关。

 <%@ Page EnableSessionState="True" %> 

随着ASP.MVC 3的发布,你现在可以在你的控制器中添加一个属性来将会话标记为只读,这允许从同一个客户端同时调用动作。

无时隙控制器支持:

Sessionless Controller是ASP.NET MVC 3中的另一个很棒的新function。通过Sessionless Controller,您可以轻松控制控制器的会话行为。 例如,您可以将HomeController的Session设置为Disabled或ReadOnly,从而允许单个用户执行并发请求。 有关详细信息,请参阅MVC3中的 ASP.NET MVC和HowTo:Sessionless Controller中的 并发请求 – 为什么? 。

– 从这个DZone文章 。

通过将SessionState(SessionStateBehaviour.Disabled)添加到您的控制器,运行时将允许您从同一浏览器会话中同时调用多个操作。

不幸的是,我不认为有一种方法来标记一个动作,以便只有在该动作被调用时才禁用会话,所以如果你有一个控制器有一些需要会话的动作而其他的则不需要,你需要把那些不是单独的控制器。

在更高版本的ASP MVC中,您可以使用SessionStateAttribute修饰单个控制器类

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

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

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

好并发请求更多的浏览器依赖以及如果你开火假设10个并发请求的行动在Mozilla中使用AJAX和使用IE 8相同,那么你会发现,Mozilla的风格发射一个请求等待其响应,然后再次发射上…这是一个一个的基础,而在IE *这个消息对于服务器一次约6个并发请求。

所以并发请求也依赖于浏览器types。

我build议使用jQuery为您的ajax需要与asp.net mvc,我已经完全使用它,它已经非常容易。

至于教程,我会看看这个: http : //docs.jquery.com/Ajax

有大量的选项可供玩,我也build议下载萤火虫,这样你就可以看到请求从你的网页asynchronous启动,看看他们是否开火,他们回报什么等等。

就像其他人一样,AJAX请求是asynchronous的,不会被排队等待,并且它们在完成时都会独立返回,所以如果你在萤火虫中观看,很容易看到幕后发生了什么,debugging器在获取之前击中