繁体   English   中英

如何使WCF服务一次仅接听一个电话

[英]How to make WCF Service take only one call at a time

我们有WCF服务,例如

Public Class MyService

{

 [OperationContract]
 Public void OpperationA()
  {
  }

 [OperationContract]
 Public void OpperationB()
 {
  }

 [OperationContract]
 Public void OpperationC()
 {
  }

 [OperationContract]
 Public void OpperationD()
 {
  }
}

我们有一个WCF服务的客户端,它是一个Windows服务,它使用新代理调用OperationA / B / C / D之上的所有操作。

在当前的实现中,我们存在客户端同时调用所有操作的问题。
InstanceContextMode = PerCall和ConcurrencyMode =单

是否存在InstanceContextMode和COncurrency的任何组合,它们可以将我的服务更改为一次仅接受一个请求,我的意思是,如果客户端代理A调用了OPerationA,并且该服务正在处理该请求,并且客户端代理B是否尝试调用OperationB(或任何其他操作),则应将其阻止,直到第一个请求完成。

谢谢

将InstanceContextMode更改为Single应该足够了。 从MSDN文档在这里

ConcurrencyMode = Single :服务实例是单线程的,并且不接受可重入的调用。 如果InstanceContextMode属性为Single,并且在实例为呼叫提供服务时有其他消息到达,则这些消息必须等待,直到该服务可用或消息超时为止。

来自http://msdn.microsoft.com/zh-cn/library/system.servicemodel.instancecontextmode%28v=vs.110%29.aspx

如果InstanceContextMode值设置为Single,则结果是您的服务一次只能处理一条消息,除非您还将ConcurrencyMode值也设置为Multiple。

显然,如果您有多个服务主机,则无法使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM