2013-03-21 40 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,執行速度要慢得多。 –

相關問題