WCF代理池/管理器

WCF代理池/管理器,wcf,client,pool,Wcf,Client,Pool,我的应用程序需要与多个外部WCF服务通信,以满足客户端应用程序的请求。作为一个WCF服务,它当然必须能够同时处理多个请求。也就是说,由于我将访问多个服务,我考虑按以下方式对客户端进行分组: public static class ClientManager { private static readonly Service1Client _service1Client = new Service1Client(); private static readonly Service2

我的应用程序需要与多个外部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客户端。但是,对于同时向
Service1DefaultClient
Service2DefaultClient
发出多个请求的服务,我真的不知道这种设计是否最合适。你有什么建议?创建一个更复杂的客户端池,每个服务中有几个代理可供选择?

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

  • 如果ClientBase实例转换到故障状态,它将变得不可用,您必须重新创建它
  • 如果您有一个有状态的服务,会话生存期将与客户机代理对象的生存期相同,在您的情况下,它非常长
  • 根据您的绑定设置,ClientBase将在同一个代理实例上创建。在您的情况下,这可能会严重影响性能
  • 我只是不知道这能解决什么问题

代理是相对轻量级的,因为有,所以每次需要时我都会创建一个新实例。

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

  • 如果ClientBase实例转换到故障状态,它将变得不可用,您必须重新创建它
  • 如果您有一个有状态的服务,会话生存期将与客户机代理对象的生存期相同,在您的情况下,它非常长
  • 根据您的绑定设置,ClientBase将在同一个代理实例上创建。在您的情况下,这可能会严重影响性能
  • 我只是不知道这能解决什么问题
代理相对来说是轻量级的,因为它的存在,所以我只会在每次需要时创建一个新实例