WCF4 () ?. NET Framework 4)支持客户端连接池

本文关键字:支持 客户端 连接 Framework NET WCF4 | 更新日期: 2023-09-27 18:12:51

那么问题是WCF4是否调用客户端连接池到WCF-service?例如,我们有asp.net应用程序作为客户端和服务(在不同的机器上)。然后在代码的某个地方,我们有这样的东西:

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

让我们假设在任何一段代码中都有另一个服务调用:

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

那么client2连接将从连接池中获取吗?

WCF4 () ?. NET Framework 4)支持客户端连接池

"池化"依赖于使用的传输协议。对于HTTP, WCF默认使用HTTP持久连接,这些连接存在的时间很短(它们在100秒不活动后关闭),并且可以被后续请求(甚至来自不同的代理实例)重用。对于TCP和命名管道,WCF提供了内置池。

你为什么要这么做?WCF可以通过ConcurrencyMode.Multiple在一个客户机上接受多个请求。因此,初始化两个客户机没有多大意义。

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

InstanceContextMode

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

请求

  • 多个(客户端可以同时进行多个调用->多线程)
  • 单个(客户端可以进行一个呼叫,其他呼叫必须等待另一个呼叫完成)
  • 可重入(客户端可以同时进行多个调用,我不知道确切的情况,但我认为这就像如果一个调用使用另一个wcf服务,另一个调用可以被处理,直到另一个wcf服务调用完成,所以它释放了wcf服务调用时间和响应之间的锁)

SessionMode

  • 允许(客户端可以使用会话,但不是必须)
  • notalallowed(客户端不能使用会话)
  • 必需(客户端必须使用会话)

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

您还可以指定可以初始化多少个实例,可以进行多少个并发调用以及可以使用多少个会话。