asp.net mvc 4控制器并行执行多个ajax调用

时间:2013-03-21 13:55:02

标签: ajax asp.net-mvc-4 controller

我有一个asp.net MVC 4控制器,通过ajax调用方法。

问题是控制器按顺序处理ajax请求。 这会导致性能问题,因为加载页面的时间是所有ajax请求的总和,而不是最长的ajax请求。

为了证明这一点,我在第一个(“ReadOverview8Week”)方法中设置了一个断点。 这些方法中的每一种都需要大约600ms来执行个性化。

http://i.stack.imgur.com/HhtEX.png

如何让控制器并行响应所有三个请求? 我正在使用iis 8。

这是ajax请求(来自kendo ui dataSource)

.DataSource(dataSource => dataSource.Ajax()
   .Read(read => read.Action("ReadAllSitesOverview", "AbuseCase").Type(HttpVerbs.Get))

感谢。

1 个答案:

答案 0 :(得分:17)

您遇到的问题是由ASP.NET管理会话的方式引起的。以下是ASP.NET Session State Overview并发请求和会话状态部分)中最重要的部分:

  

对每个会话的访问ASP.NET会话状态是独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权。第二个请求仅在第一个请求完成后执行。

如果您的操作不需要访问会话,则可以解决您的问题。如果是这种情况,您可以使用SessionStateAttribute属性

来装饰控制器
[SessionState(SessionStateBehavior.Disabled)]

这样控制器就不必等待会话了。

如果您的操作仅需要对会话的读取权限,则可以尝试使用SessionStateBehavior.ReadOnly值。这不会导致独占锁定,但请求仍然必须等待读写请求设置的锁定。