2008-12-01 119 views

回答

5

除了東西蓋伊星巴克提到的一個關鍵因素將是你使用(與會議要求一起)的安全模式 - 如果你不要再使用你的代理,你不能重新使用安全會話。

這意味着客戶端必須驗證自己與每個電話是浪費。

但是,如果您決定這是您想要做的事情,請確保將客戶端配置爲不建立安全上下文(因爲您永遠不會使用它),這將爲您節省一些往返服務器的時間:-)

3

這裏有一個關於.NET Remoting中的服務器激活對象(由WCF替代的技術之一)的推論,它有兩種模式,「單一調用」(無狀態)和「單身」(有狀態)。

你在WCF採用的方法,應根據你的表現,並與你的消費者的需求相結合比例要求,以及服務器端的設計約束。

如果你必須保持服務調用之間的狀態,那麼顯然你想擁有一個有狀態的實例,但是如果你不這樣做,你應該實現它,以便它是靜態的,它應該更好地擴展(你可以更輕鬆地進行負載平衡等)。

+0

我相信布萊恩問的客戶端代理的重用。這與服務器端實例的生命週期無關 – 2009-11-28 16:26:32

5

還有一點要考慮的是通道故障。通過設計WCF不允許在未處理的異常發生後使用客戶端代理。

IMyContract proxy = new MyContractClient(); 
try 
{ 
    proxy.MyMethod(); 
} 
catch 
{} 

//Throws CommunicationObjectFaultedException 
proxy.MyMethod(); 
15

或者是它最好創建一個和重新使用它?

不要開始實施您自己的池實施。這已經在框架中完成了。 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