WCF客户端承载
http://www.cnblogs.com/wengyuli/archive/2010/12/27/1918109.html參考
Hi victory,
?? 你提出的問題很好,這個問題,相信很多人學習了WCF編程以后,都會有這樣的疑問,而且很多人在多測試的時候,往往還會出現大于10個客戶端同時調用服務的時候,就會出錯。服務沒有相應,拋出Timeout 異常。
???
?? 你的問題其實本質上是關于WCF處理大規模并發客戶端請求的問題。也就是WCF在處理大規模客戶端請求的時候,有沒有好的解決方案,或者表現。
???處理大規模客戶端請求的,WCF確實能夠勝任,因為其本身已經提供了很好的解決機制。
? 關于并發客戶端請求,WCF通過設置最大并發連接數目、會話數目、并發服務實例數目來進行處理。
我測試的1000個并發請求,是可以順利相應的。而且的測試機器是普通的PC機器,XP pro系統。
?涉及到大量請求的時候,可以考慮使用WCF的 ServiceThrottlingBehavior 屬性。
| MaxConcurrentCalls | 獲取或設置一個值,該值指定整個?ServiceHost?中正在處理的最多消息數。 | |
| MaxConcurrentInstances | 獲取或設置一個值,該值指定服務中可以一次執行的最多?InstanceContext?對象數。 | |
| MaxConcurrentSessions | 獲取或設置一個指定?ServiceHost?對象可一次接受的最多會話數的值。 |
? 這里我們設置一下服務的限流行為就可以了。具體如下:
serviceBehaviors>????????<behavior?name="WCFService.WCFServiceBehavior">
??????????<serviceTimeouts?transactionTimeout="00:01:00"/>
??????????<serviceMetadata?httpGetEnabled="true"?/>
??????????<serviceDebug?includeExceptionDetailInFaults="false"?/>
??????????<serviceThrottling?maxConcurrentCalls="1000"?maxConcurrentInstances="1000"?maxConcurrentSessions="1000"/>-->
????????</behavior>
??????</serviceBehaviors>
???
?? 這里1000可以修改,根據你的實際WCF服務需求量。服務激活類型和實例調用方式。然后進行調整。修改完畢以后,重新啟動服務,基本就正常了。
這個是三個屬性的測試例子。
于此問題本質上相關的問題很多,中文和英文論壇都有人討論過。一下是這寫問題的連接:
http://social.microsoft.com/Forums/zh-CN/wcfzhchs/thread/155c87f0-a7d4-4c4e-b40b-6292d8731822
http://social.microsoft.com/Forums/zh-CN/wcf/thread/3a89a21d-76ca-4941-8cbe-c89afb5d163b
WCF分布式開發常見錯誤(20):TimeoutException was unhandled?
? 以上之時WCF提供給我們的可以使用的配置屬性。你要想了解更深入的WCF底層線程模型和如何處理大量的客戶端數據交互請求。可以了解一下
IOCP在WCF里的應用。
? 這個前段時間冰紅茶在我的博客里提問,我花兩周時間查找資料找出這個問題的答案。
你可以參考一下。這個才是WCF能應付大量并發請求的本質所在。上面只是一些WCF的配置屬性,數據應用的范疇。
WCF熱門問題編程示例(3):WCF是否使用或者支持IOCP(IO完成端口)?
經典技術文章翻譯(2)Does WCF use or Supports IOCP?WCF是否支持或者使用了IOCP完成端口。
?? 應該很有參考價值。
希望對你的學習有幫助~
總結
- 上一篇: Android系统分区理解及分区目录细解
- 下一篇: asp.net程序调用NTFS分区下Or