2

我有一个带有 3 个操作合同的 WCF 服务。我设置[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]了这项服务。我的基本疑问是我能否一次调用所有 3 项服务,或者一次只能调用一个合同。请任何人提供解决方案。

4

1 回答 1

0

并发模式具有实例上下文模式的范围。如果您设置ConcurrencyModeSingle您只是告诉 WCF 每个服务实例只能处理一个并发请求 -Single也是ConcurrencyMode.

除非您也配置InstanceContextModeSingle(=您将使服务单例),否则您的服务主机将为每个请求(无状态绑定,如BasicHttpBindingor WebHttpBinding)或为每个连接的代理(有状态绑定,如NetTcpBindingNamedPipeBinding以及 的某些配置WsHttpBinding)生成新的服务实例。在前一种情况下ConcurrencyMode没有任何影响,因为每个服务实例仅用于处理单个请求 = 来自任意数量客户端的请求可以同时处理。在以后的情况下ConcurrencyMode.Single表示来自单个客户端代理的请求按顺序处理,但来自多个客户端代理的请求可以同时处理。每个公开的合约都需要单独的端点,并且客户端上的每个使用的端点都需要单独的代理实例,因此在这种情况下,每个合约的代理都将具有单独的服务实例。

使用您当前的配置,只有服务节流控制有多少并发客户端可以使用您的服务。

一旦您设置InstanceContextModeSingle,您确实将拥有一次只能处理单个请求的服务。实现的合约数量无关紧要,因为在这种情况下,在单个服务的端点中公开的所有合约都由单个服务实例处理,该实例只接受一个并发请求。

于 2011-09-15T07:42:38.227 回答