我有一个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))
感谢。
答案 0 :(得分:17)
您遇到的问题是由ASP.NET管理会话的方式引起的。以下是ASP.NET Session State Overview(并发请求和会话状态部分)中最重要的部分:
对每个会话的访问ASP.NET会话状态是独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权。第二个请求仅在第一个请求完成后执行。
如果您的操作不需要访问会话,则可以解决您的问题。如果是这种情况,您可以使用SessionStateAttribute属性
来装饰控制器[SessionState(SessionStateBehavior.Disabled)]
这样控制器就不必等待会话了。
如果您的操作仅需要对会话的读取权限,则可以尝试使用SessionStateBehavior.ReadOnly
值。这不会导致独占锁定,但请求仍然必须等待读写请求设置的锁定。