2011-08-31 80 views
0

我的應用程序需要與幾個外部WCF服務通信以滿足來自客戶端應用程序的請求。本身就是一個WCF服務,它當然必須能夠同時處理多個請求。這之中,因爲我會acessing不止一個服務,我想到了通過以下方式對客戶端分組:WCF代理池/管理器

public static class ClientManager 
{ 
    private static readonly Service1Client _service1Client = new Service1Client(); 
    private static readonly Service2Client _service2Client = new Service2Client(); 
    ... 

    public static Service1Client Service1DefaultClient { get { return _service1Client; } } 
    public static Service2Client Service2DefaultClient { get { return _service2Client; } } 
} 

然後,從代碼的剩餘,我只需要執行

ClientManager.Service1DefaultClient.SomeMethod(); 
ClientManager.Service2DefaultClient.SomeMethod(); 
... 

這個想法是創建一箇中心位置來更好地管理WCF客戶端。然而,我不確定這個設計是否是最合適的服務,它將同時向Service1DefaultClientService2DefaultClient發出幾個請求。你有什麼建議?使用每個服務中的多個代理創建更復雜的客戶端池以供選擇?

回答

3

擁有靜態客戶端代理對我來說不是一個好主意。

  • 如果ClientBase實例轉換爲Faulted狀態,它將變得不可用,您必須重新創建它。
  • 如果您有一個有狀態的服務,會話生存期將與客戶端代理對象的生命週期相同,這對您而言非常長。
  • 根據您的綁定設置,在相同的代理實例上創建ClientBase may serialize concurrent calls。在你的情況下,這可能會強烈影響性能。
  • 我只是沒有看到這個問題解決了什麼問題。

因爲ChannelFactory caching代理是相對輕量級的,所以我會在每次需要時創建一個新實例。