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连接将从连接池中获取吗?
"池化"依赖于使用的传输协议。对于HTTP, WCF默认使用HTTP持久连接,这些连接存在的时间很短(它们在100秒不活动后关闭),并且可以被后续请求(甚至来自不同的代理实例)重用。对于TCP和命名管道,WCF提供了内置池。
你为什么要这么做?WCF可以通过ConcurrencyMode.Multiple
在一个客户机上接受多个请求。因此,初始化两个客户机没有多大意义。
InstanceContextMode
- Session(每会话创建一个服务实例)
- 单个(为每个客户端创建单个实例)
- PerCall(每次调用创建一个服务实例)
请求
- 多个(客户端可以同时进行多个调用->多线程)
- 单个(客户端可以进行一个呼叫,其他呼叫必须等待另一个呼叫完成)
- 可重入(客户端可以同时进行多个调用,我不知道确切的情况,但我认为这就像如果一个调用使用另一个wcf服务,另一个调用可以被处理,直到另一个wcf服务调用完成,所以它释放了wcf服务调用时间和响应之间的锁)
SessionMode
- 允许(客户端可以使用会话,但不是必须)
- notalallowed(客户端不能使用会话)
- 必需(客户端必须使用会话)
大多数时候我使用InstanceContextMode.PerSession
(因为客户端1不能访问客户端2的服务中的变量),ConcurrencyMode.Multiple
和SessionMode.Required
。
您还可以指定可以初始化多少个实例,可以进行多少个并发调用以及可以使用多少个会话。