2012-04-23 64 views
3

我們有一個服務(A)調用另一個WCF服務(B)。當達到最大WCF連接數時會發生什麼?

服務B具有

<serviceThrottling 
     maxConcurrentCalls="16" 
     maxConcurrentSessions="10" 
     maxConcurrentInstances="26" /> 

服務A的默認值可以生成多達150個線程,它們中的一些可撥打服務B.

會發生什麼,如果一個服務與更多的呼叫服務B比並發連接的最大數量多?

服務B(WCF)將它們拋棄或將它們存儲在隊列中嗎?

+2

額外的通話將等待定義的超時時間,如果沒有服務實例可用於在這段時間內爲他們服務,他們會失敗(最有可能以'TimeoutException')。 – 2012-04-23 06:51:15

+0

@marc_s - 我很想知道你爲什麼把這些信息放在評論中,而不是答案。 – 2012-04-23 07:04:11

回答

3

客戶端被阻塞,直到連接可用。

當然,這種行爲表明存在另一個隊列,持有等待連接請求。我假設隊列會有自己的閾值,所以一旦有最大數量的等待連接,進一步的傳入請求就會被拋棄。 (這只是我的猜想,我不知道這個理論隊列在哪裏配置,.....有人?)。

在我的自動化測試中,實際上遇到了一個問題,連接沒有被丟棄,最終導致我的系統掛起,因爲達到了閾值。

https://stackoverflow.com/a/4031284/25216

+0

Andrew,你的回答非常好,謝謝。我回到了它,因爲我想知道我可以如何限制這個隊列,你有沒有發現任何東西,或者你可以指向一個方向?你認爲它可能與tcp積壓有關,也許? – Mithir 2012-07-24 12:41:03

相關問題