2013-03-21 44 views
9

我有一个asp.net MVC 4控制器,即通过ajax调用方法。asp.net mvc 4控制器并行执行多个ajax调用

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

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

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

我怎样才能让所有并行三个请求控制器应对? 我使用IIS 8.

这是AJAX请求(从剑术UI数据源)

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

感谢。

+0

包含您的ajax请求的代码。 – EkoostikMartin

+0

本例中的ajax请求来自kendo数据源。 –

回答

14

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

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

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

[SessionState(SessionStateBehavior.Disabled)] 

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

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

+0

把它放在控制器上解决我的问题!谢谢。 –

+0

你是个天才,男人!这也解决了我的问题 – KorsaR

+0

如何在web api中做到这一点。我注意到,我在很短的时间内多次击中api,执行速度要慢得多。 –

相关问题