并发使用使用同一个客户端代理

来源:互联网 发布:如何写软件 编辑:程序博客网 时间:2024/06/06 06:18

在有些情况下,我们可能会在不同线程中使用同一个WCF客户端代理,如果WCF客户端支持并发,那么我们的多个调用就不用排队,假如说我们的三个调用分别花费1秒的时间,那么在支持并发调用的情况下,三个调用都返回的时间应该是1秒多一点。如果客户端代理不支持并发,或者说对调用进行了排队,那么三个调用都完成的时间应该在3秒多一点。幸运的是,WCF客户端是支持并发调用的;但是必须在调用前显式打开Channel,否则并发调用就会被排队,只有第一个调用回来,才会继续后来的调用。其中缘由是,如果没有显式打开Channel,那么WCF就会在第一次服务调用的时候自动打开Channel,这进入这个逻辑后,就会造成后续并发调用排队的情况。这是WCF的内部实现决定的,但这个实现大部分时候都不是我们想要的行为,所以,最好在使用Channel前,显式将其打开,如下:

ISimpleContract proxy = factory.CreateChannel();

((IClientChannel)proxy).Open();

//Make a call with the proxy

proxy.Hello("Hello world!");

 

原创粉丝点击