2011-08-31 74 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代理是相对轻量级的,所以我会在每次需要时创建一个新实例。