2012-10-22 116 views
0

我有一個運行在ASP.NET 3.5上的REST服務,並且我有來自客戶端的多個併發異步調用來擊中WCF服務。它們都是序列化的(順序的)而不是並行調用。這裏是我的設置WCF和ASP.NET併發問題

InstanceContextMode = InstanceContextMode.PerSession

ConcurrencyMode = ConcurrencyMode.Multiple

web.config中 - 限制值

<serviceThrottling maxConcurrentCalls="64" maxConcurrentInstances="64" maxConcurrentSessions="64"/>

沒有會話中的代碼編寫。

我錯過了什麼讓我的WCF併發?

+0

我想使用異步調用不會強制客戶端的併發,而是確保您不會等待響應。你嘗試過'Tasks.Parrallel'嗎? http://msdn.microsoft.com/en-us/library/dd460717.aspx – faester

+0

向我們展示您的客戶端代碼:您如何管理代理以及如何調用服務?順便說一下,在混合PerSession和ConcurrencyMode.Multiple時要非常小心,這就要求你必須使用鎖和whatnot手動同步訪問會話實例狀態。 – Jeroen

+0

客戶端代碼通過Sencha觸摸代碼。代理由sencha管理。出於測試目的,我有PerCall和ConcurrencyMode.Single來保證每個調用的不同線程。 –

回答

0

假設它發生,導致PerSession模式。嘗試從不同的客戶端調用服務我認爲你將有並行調用。

對於每個會話服務,Max Instances既是併發活動實例的總數,也是併發會話數。

您可以使用每種呼叫類型的服務,而實例數量實際上與併發呼叫數量相同。或者您可以在客戶端上使用異步方法,例如'Begin ...()'

0

我有一個類似的問題,但我使用普通的舊.aspx頁面。不管我打了多少電話,IIS只是以串行方式處理它們,而不是並行處理它們。

事實證明問題是當前頁面會話鎖定,所以只有一個頁面可以一次訪問會話,因此可以串行。

我不知道你的問題是否是由同一個問題引起的,但我認爲它可能是一個開始的好地方。