开发者

WCF Proxy Pool/Manager

My application needs to comunicate with several external WCF services to satisfy requests from client applications. Being itself a WCF service, it must of course be able to process several simultaneous requests. That being, and since I will be acessing more than one service, I thought about grouping clients in the following manner:

public static class ClientManager
{
    private static readonly Service1Client _service1Client = new Service1Client();
    private static readonly Service2Client _service2Client = new Se开发者_运维问答rvice2Client();
    ...

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

Then, from the remaining of the code, I would only need to execute

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

The idea is to create a central place to better manage WCF clients. However, I don't really know if this design is the most appropriate one for a service which will be issuing several requests at the same time to Service1DefaultClient and Service2DefaultClient. What do you suggest? Creating a more complex client pool with several proxies from each service to choose from?


Having static client proxies doesn't look like a good idea to me.

  • If ClientBase instance transitions to the Faulted state, it becomes unusable and you have to re-create it.
  • If you have a stateful service, session lifetime will be the same as lifetime of a client proxy object, which is very long in your case.
  • Depending on your binding settings, ClientBase may serialize concurrent calls made on the same proxy instance. In your case, this may strongly affect performance.
  • I just don't see what problem does this solve.

Proxies are relatively lightweight because of the ChannelFactory caching, so I would just create a new instance every time it is needed.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜