使用WCF服務時,每次使用它時最好創建一個新的服務實例嗎?或者創建一個並重新使用它會更好嗎?爲什麼這兩種方法都更好?異步代理是否一樣?WCF服務代理生命週期的最佳實踐?
回答
除了東西蓋伊星巴克提到的一個關鍵因素將是你使用(與會議要求一起)的安全模式 - 如果你不要再使用你的代理,你不能重新使用安全會話。
這意味着客戶端必須驗證自己與每個電話是浪費。
但是,如果您決定這是您想要做的事情,請確保將客戶端配置爲不建立安全上下文(因爲您永遠不會使用它),這將爲您節省一些往返服務器的時間:-)
這裏有一個關於.NET Remoting中的服務器激活對象(由WCF替代的技術之一)的推論,它有兩種模式,「單一調用」(無狀態)和「單身」(有狀態)。
你在WCF採用的方法,應根據你的表現,並與你的消費者的需求相結合比例要求,以及服務器端的設計約束。
如果你必須保持服務調用之間的狀態,那麼顯然你想擁有一個有狀態的實例,但是如果你不這樣做,你應該實現它,以便它是靜態的,它應該更好地擴展(你可以更輕鬆地進行負載平衡等)。
還有一點要考慮的是通道故障。通過設計WCF不允許在未處理的異常發生後使用客戶端代理。
IMyContract proxy = new MyContractClient();
try
{
proxy.MyMethod();
}
catch
{}
//Throws CommunicationObjectFaultedException
proxy.MyMethod();
或者是它最好創建一個和重新使用它?
不要開始實施您自己的池實施。這已經在框架中完成了。 WCF代理使用下面的緩存渠道工廠。因此,創建新的代理並不太昂貴(但請參閱Guy Starbuck關於會話和安全性的回覆!)。
另請注意,某個空閒時間(默認爲10分鐘)後代理服務器超時。
如果你想更明確的控制你可以考慮使用ChannelFactories和渠道,而不是直接的「容易去,全開箱」 ClientBase代理。
http://msdn.microsoft.com/en-us/library/ms734681.aspx
和一個「必須閱讀」關於這個話題是: http://blogs.msdn.com/wenlong/archive/2007/10/27/performance-improvement-of-wcf-client-proxy-creation-and-best-practices.aspx
- 1. 最佳實踐WCF服務 - Windows Azure的
- 2. 棄用WCF服務的最佳實踐
- 3. 大型WCF服務的最佳實踐?
- 4. Alfresco - 自定義文檔生命週期的最佳實踐(Java?)
- 5. 最佳實踐來調用WCF服務
- 6. 哪個Structuremap生命週期是最佳實踐? (v2.5.4)
- 7. Android - 定期服務的最佳實踐
- 8. WCF服務客戶端生命週期
- 9. Web服務和單例WCF服務的WCF生命週期?
- 10. WCF服務的實例的生命週期?
- 11. OSGi服務 - 最佳實踐
- 12. 最佳實踐:AmazonS3服務
- 13. WCF和錯誤處理,最佳實踐
- 14. 生命週期服務
- 15. 服務生命週期
- 16. Android服務生命週期
- 17. WCF關閉最佳實踐
- 18. WCF呼叫 - 最佳實踐
- 19. 最佳實踐的服務和數據契約 - WCF
- 20. 多個WCF服務的最佳實踐要求
- 21. 使用WCF Web服務時的最佳實踐身份驗證
- 22. Silverlight使用Wcf服務的最佳實踐?
- 23. 使用WCF版本化服務的最佳實踐?
- 24. 服務層的Python/Flask最佳實踐
- 25. 創建Web服務的最佳實踐
- 26. 安卓GPS服務的最佳實踐
- 27. 安全web服務的最佳實踐
- 28. MVC服務的最佳實踐
- 29. 內部web服務的最佳實踐
- 30. 部署Windows服務的最佳實踐
我相信布萊恩問的客戶端代理的重用。這與服務器端實例的生命週期無關 – 2009-11-28 16:26:32