【问题标题】:How to make WCF Service take only one call at a time如何让 WCF 服务一次只接一个电话
【发布时间】:2015-01-16 18:27:25
【问题描述】:

我们有一个像

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

谢谢

【问题讨论】:

    标签: c# .net wcf instancecontextmode


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我试试这个
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。但是有没有办法让服务只需要一个调用多个服务主机
    • 在这种情况下,您需要自己进行锁定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2019-02-18
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多