11

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

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

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

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

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

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

谢谢。

4

1 回答 1

19

您面临的问题是由 ASP.NET 管理会话的方式引起的。这是ASP.NET 会话状态概述并发请求和会话状态部分)中最重要的部分:

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

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

[SessionState(SessionStateBehavior.Disabled)]

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

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

于 2013-03-21T14:04:38.797 回答