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

Tim*_*ell 10 ajax controller asp.net-mvc-4

我有一个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))
Run Code Online (Sandbox Code Playgroud)

谢谢.

tpe*_*zek 17

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

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

如果您的操作不需要访问会话,则可以解决您的问题.如果是这种情况,您可以使用SessionStateAttribute属性修饰控制器:

[SessionState(SessionStateBehavior.Disabled)]
Run Code Online (Sandbox Code Playgroud)

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

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