WCF ConcurrencyMode.Multiple连接最佳实践和缓存

时间:2009-10-22 20:15:09

标签: .net wcf performance multithreading caching

我有一个WCF服务,其中包含以下设置:

  • NetNamedPipeBinding
  • ConcurrencyMode.Multiple
  • InstanceContextMode.Single

现在我有一个以多线程方式访问此WCF服务的客户端。

据我所知,我必须为每个线程打开一个新的服务连接,以避免线程阻塞彼此。

  • 在这种情况下,Open()电话的费用是多少(服务在同一台电脑上)?
  • 我应该缓存/池化我的客户端类吗? (派生自ClientBase )或WCF是否为类似于SQLConnection Pooling的连接提供透明池?

2 个答案:

答案 0 :(得分:3)

不幸的是,WCF没有池连接客户端。我发现Open()相对较慢并构建了自己的池化机制,在客户端和服务器之间保持一些持久连接。

关于这一点的一个常见问题是,如果在客户端和服务器之间发生一些简单的超时(或者抛出任何类型的CommunicationException),客户端实例就会进入Faulted状态并变得不可用。此时你必须销毁并用新实例替换它。

答案 1 :(得分:1)

詹姆斯亚历山大的答案很明显(你必须亲自联系),但我想我发布了a link to a blog entry,讨论了在ClientBase之上添加连接池的实现。 Here's the follow up post他会详细介绍并提供下载代码的链接。

相关问题