我有一个包含3个操作合同的WCF服务。我为此服务设置了[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
。我的基本疑问是我能否一次拨打所有3项服务,或者只能同时拨打一份合同。任何人都可以提供解决方案。
答案 0 :(得分:0)
并发模式具有实例上下文模式的范围。如果将ConcurrencyMode
设置为Single
,则只需告诉WCF每个服务实例只能处理一个并发请求 - Single
也是ConcurrencyMode
的默认值。
除非您将InstanceContextMode
配置为Single
(=您将使服务单例),否则您的服务主机将为每个请求生成新的服务实例(无状态绑定,如BasicHttpBinding
或WebHttpBinding
)或每个连接的代理(有状态绑定,如NetTcpBinding
,NamedPipeBinding
和WsHttpBinding
的某些配置。在前一种情况下ConcurrencyMode
没有任何影响,因为每个服务实例仅用于处理单个请求=来自任意数量的客户端的请求可以同时处理。在后面的情况下,ConcurrencyMode.Single
表示来自单个客户端代理的请求按顺序处理,但来自多个客户端代理的请求可以同时处理。每个公开的合同都需要单独的端点,客户端上的每个消耗端点都需要单独的代理实例,因此在这种情况下,每个合同的代理将具有单独的服务实例。
使用当前配置时,仅服务限制控制可以使用服务的并发客户端数量。
将InstanceContextMode
设置为Single
后,您确实会拥有一次只能处理单个请求的服务。实现的合同数量无关紧要,因为在单一服务的端点上公开的所有合同在这种情况下都由单个服务实例处理,该服务实例只接受一个并发请求。