如何使WCF服务一次只能调用一个

时间:2014-11-19 09:38:40

标签: c# .net wcf instancecontextmode

我们有像

这样的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 = Single

InstanceContextMode和COncurrency是否有任何组合可以改变我的服务,一次只能接受一个请求,我的意思是如果客户端代理A调用OPerationA并且服务正在处理请求,并且客户端代理B试图调用OperationB(或任何其他操作),应该被阻止,直到第一个请求完成。

由于

2 个答案:

答案 0 :(得分:3)

将InstanceContextMode更改为Single就足够了。来自MSDN文档here

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

答案 1 :(得分:0)

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

  

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

显然,如果你有多个服务主机,这将无效。