2

我们有一个 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(或任何其他操作),它应该被阻止,直到第一个请求完成。

谢谢

4

2 回答 2

3

将 InstanceContextMode 更改为 Single 就足够了。从这里的 MSDN 文档:

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

于 2014-11-19T09:56:58.597 回答
0

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

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

显然,如果您有多个服务主机,这将不起作用。

于 2014-11-19T09:56:46.827 回答