2011-10-14 27 views
0

我已經在這裏問了一個類似的問題:WCF Service calling an external web service results in timeouts in heavy load environment但是現在我已經有了一個更好的主意了,因爲發佈了一個新問題。WCF客戶端在重負載下超時

這是正在發生的事情:

  • .NET客戶端發送的同時,以一個WCF服務的多個請求(如果它幫助 - 我使用Visual Studio負載測試複製此scneario)
  • 客戶端已將「sendTimeout」設置爲5秒
  • WCF服務收到它並開始處理它。處理過程涉及向外部服務發送請求,這可能需要1秒左右的時間來回復
  • 這是我認爲問題所在的地方:客戶端向服務發送了很多請求,並且服務仍然很忙處理所述併發請求,一些來自客戶機的多個請求被5秒

我曾嘗試之後超時以下:

  • 改變了InstanceContextMode到PerCall
  • 增加maxConcurrentCalls 0123的值個maxConcurrentInstances
  • 增加connectionManagement.maxconnection的價值在machine.config中

但沒有的,這似乎是做任何區別。有沒有人有任何想法如何確保我不會遇到這個超時問題?

+0

感謝大家的幫助和指點。我想我已經找到了這個問題。我不得不增加maxConcurrentCalls&maxConcurrentSessions的值 - 這意味着該服務必須具有PerCall的InstanceContextMode。 我之前也是這樣做的,但是在我的負載測試中測試了一個單元測試,並且這些配置更改沒有任何區別。當我創建一個新的網絡測試,然後加載測試,一切似乎都很好地結合在一起。一直無法想出爲什麼是這樣的情況! – Ambuj

回答

0

好的,你說WCF,這還不夠。你使用什麼綁定,你在哪裏託管它?如果您使用IIS,則可能與自託管不同,這可能是不同的基礎問題。

可能的原因是ThreadPool的大小很小。你可以使用ThreadPool.SetMaxThreads()來改變這個,但要注意這是一個敏感值。看看here

+0

對不起 - 服務託管在IIS中,它使用basicHttpBinding。我會嘗試一下ThreadPool大小的建議。 – Ambuj

0

請查看以下鏈接:
http://weblogs.asp.net/paolopia/archive/2008/03/23/wcf-configuration-default-limits-concurrency-and-scalability.aspx

我不知道你想達到的目標。由於WCF服務正在進行耗時的操作,因此無法使其過載並期望其正常工作。你可以做以下(檢查有關設置以下鏈接):

  1. 增加WCF服務
  2. 的接收能力增加服務的發送超時
  3. 增加客戶端的發送超時
  4. 增加接收客戶端的超時
  5. 限制的傳出連接到WCF服務

最好也是最健壯的選項是配置和使用MSMQ和WCF服務。

+0

該服務需要同步 - 所以不要認爲MSMQ是一個選項 - 是嗎?我沒有看過MSMQ的一面。我會調查一下。在你的建議:我如何「限制傳出連接到WCF服務」? – Ambuj

+0

嘗試設置maxConnections(我認爲這包括傳入和傳出連接)。如果您使用的是TCP或NamedPipes,還要檢出TcpConnectionPoolSettings.MaxOutboundConnectionsPerEndpoint屬性。 –

+0

看看這是否有幫助:http://weblogs.asp.net/jclarknet/archive/2007/06/21/a-lesson-learned-about-concurrent-calls-and-wcf-binding-config.aspx –