2011-07-03 40 views
0

我已閱讀關於wcf客戶端的內存使用情況,以及我迄今爲止所做的可能是錯誤的。
當我使用了一個wcf客戶端時,我爲每個調用創建了一個新的wcf客戶端。 (用於自助託管和iis)。
這是要走的路嗎?我應該創建一個客戶作爲成員並全部使用它?
什麼是wcf客戶端的真正內存使用情況?
謝謝什麼是使用wcf客戶端的最佳方式? (內存明智)

+0

你真的在這裏有內存問題嗎?如果是這樣的話:你在處理它們嗎? –

+0

好吧,是的,我有內存問題,我通過放棄'using'語句並正確處理它們來解決它們,我想知道創建一個客戶端'ChannelFactory'或'ChannelFactory.CreateChannel( )'方法。 – guyl

回答

1

我認爲你應該只需要創建一個新的客戶端,當你需要從一個新的端點調用服務操作,但你的綁定通常保持不變。所以你可以創建一個工廠類來爲特定的合同+綁定但不同的端點創建客戶端。例如,下面將是的WebHttpBinding,但你可以代替任何你需要的綁定:

public class WebHttpClient<T> 
{ 
    protected WebHttpBinding Binding { get; private set; } 

    public WebHttpClient() 
    { 
     // set default binding here 
    } 

    public WebHttpClient(WebHttpBinding binding) 
    { 
     Binding = binding; 
    } 

    public T Get(string uri) 
    { 
     EndpointAddress _endpoint = new EndpointAddress(uri); 
     ChannelFactory<T> _factory = new ChannelFactory<T>(Binding, _endpoint); 

     _factory.Endpoint.Behaviors.Add(new WebHttpBehavior()); 
     return _factory.CreateChannel(); 
    } 
} 

其中T是您的服務合同。

+0

如果您已經創建了特定綁定的客戶端,那麼該工廠將返回創建的客戶端的含義? – guyl

+0

每次調用Get方法時,它都會返回指定端點上的服務協定實現的實例。 Theres一堆不同的路線去,但使用ChannelFactory 的基本公式是最好的創造客戶,我想。 –

+1

WCF操作中最昂貴的部分(據我瞭解)正在創建客戶端。上面的例子很好,但我會更進一步,每次調用ChannelFactory一次爲每個服務和緩存,然後在創建頻道時從緩存副本中執行。這樣你就可以生成多個渠道,但只需支付一次初始成本。 – Tim

相關問題