WCF客户端连接缓存/池

时间:2010-08-18 06:32:08

标签: wcf

假设您从一个项目公开WCF服务,并使用“添加服务引用”(在本例中为Framework 3.5 WPF应用程序)在另一个项目中使用它。

当您重新实例化ClientBase派生代理时,ClientBase是否会执行底层通道的任何类型的连接池,或者每次都会产生与服务建立连接的全部开销?我特别关注这一点,因为我们使用了wsHttpBinding的安全模式=“Message”。

2 个答案:

答案 0 :(得分:7)

请查看this article,其中介绍了有关如何缓存客户端代理的最佳做法。如果您直接创建代理(MyProxy p = new MyProxy(...)),那么您似乎无法缓存底层的ChannelFactory,这是一个昂贵的部分。但是,如果使用ChannelFactory创建代理,ChannelFactory将由AppDomain级别的代理缓存,并且它基于您传递给代理的参数(类似于基于的连接池)在连接字符串上。)

本文详细介绍了有关幕后内容的详细信息,但主要的一点是,如果使用ChannelFactory创建代理而不是直接实例化,会导致性能提升。

希望这会有所帮助!!

答案 1 :(得分:1)

This article解释是的,WCF有TCP连接池。它没有解释的是在哪些情况下它会生效。据我所知,只要你通过提供一个命名端点(IE不使用自定义Binding对象)构建你的代理对象,连接池就可以了。我通过在我的Web应用程序中加载负载并使用netstat检查打开的TCP连接来测试这一点。

但最重要的是,您不需要缓存代理对象以重新使用TCP连接。