WCF代理池/管理器

时间:2011-08-31 08:43:35

标签: wcf client pool

我的应用程序需要与多个外部WCF服务通信以满足来自客户端应用程序的请求。作为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发出多个请求的服务。你有什么建议?创建一个更复杂的客户端池,其中包含来自每个服务的多个代理以供选择?

1 个答案:

答案 0 :(得分:3)

拥有静态客户端代理对我来说不是一个好主意。

  • 如果ClientBase实例转换为Faulted状态,它将变得无法使用,您必须重新创建它。
  • 如果您拥有有状态服务,则会话生存期将与客户端代理对象的生命周期相同,在您的情况下会很长。
  • 根据您的绑定设置,ClientBase may serialize concurrent calls在同一代理实例上生成。在您的情况下,这可能会严重影响性能。
  • 我只是看不出这个解决了什么问题。

由于ChannelFactory caching,代理相对轻量级,因此每次需要时我都会创建一个新实例。