2011-11-01 85 views
8

所以问题是WCF4调用客户端连接池到WCF服务?例如,我们有ASP .NET应用程序作为客户端和服务(在不同的机器上)。然后在某处代码,我们有这样的事情:WCF4(.NET Framework 4)是否支持客户端连接池?

ServiceClient client = new ServiceClient(); 
// Here some work with service goes... 

假设我们有另外一个服务调用在anither一段代码:

ServceClient client2 = new ServiceClient(); 
// Another one processing... 

因此将客户端2从连接池中取出连接?

+0

你有什么样的泳池。您必须自己创建客户端池并实施逻辑。所以这个问题有点令人困惑。请参阅http://blogs.msdn.com/b/wenlong/archive/2007/11/14/a-sample-for-wcf-client-proxy-pooling.aspx。 – sprinter252

+0

@ sprinter252我的意思是'本地池','WCf驱动程序'实现了什么。类似的事情是ADO连接池。 – kseen

+1

因此,那么答案应该是它取决于[ObjectPooling(MinPoolSize = 0,MaxPoolSize = 5)] - 在我估计的服务上定义的属性。 – sprinter252

回答

2

你为什么要那样做? WCF可以通过ConcurrencyMode.Multiple通过一个客户端接受多个请求。因此,它不会太大意义初始化两个客户端..

WCF的ServiceContract有这种行为的三个重要属性,

InstanceContextMode

  • PerSession(每个会话创建的一个实例服务)
  • 单个(为每个客户端创建单个实例)
  • PerCall(为每个调用创建一个服务实例)

ConcurrencyMode

  • 多(客户端可以在同一时间多个电话 - >多线程)
  • 单(客户只需打一个电话等要等到对方通话结束后)
  • 可重入(客户端可以同时拨打多个电话,但我不确定,但我认为这就像一个电话使用另一个wcf服务,另一个电话可以处理,直到其他wcf服务电话完成,所以它释放时间之间的锁WCF服务调用时和响应)

SessionMode

  • 中心(客户端可以使用一个会话,但不必)
  • NotAllowed(客户端无法使用会话)
  • 必需(客户端必须使用Session)

大多数时间我用InstanceContextMode.PerSession(因为客户端1无法访问客户端2服务中的变量),ConcurrencyMode.MultipleSessionMode.Required

您还可以指定可以初始化多少个实例,可以创建多少个并发呼叫以及可以使用多少个会话。

+0

你应该花更多时间格式化你的答案。很少有人阅读格式不正确的答案(因此你会得到更少的赞扬) – jgauffin

+0

你的回答与问题有关吗?会话,实例上下文模式和并发模式与重用传输连接无关 - 这就是连接池存在的原因。即使您提到的所有内容都可以在引擎盖下使用,以提高性能。 –

+0

我的答案与他的例子有关,因为他打开了两个客户端..所以我认为这对他有用 – RaphaelH

相关问题