WCF - ConcurrencyMode

来源:互联网 发布:宏观经济数据 知乎 编辑:程序博客网 时间:2024/06/05 18:17

和 ServiceThrottlingBehavior 控制整个 ServiceHost 不同,ServiceBehavior.ConcurrencyMode 用于控制具体服务对象的并发行为。

ConcurrencyMode:

  • Single: 默认方式。服务实例是 single-threaded,不接受重入调用(reentrant calls)。也就是说对于同一个服务实例的多个调用必须排队,直到上一次调用完成后才能继续。
  • Reentrant:和 Single 一样,也是 single-threaded,但能接受重入调用,至于针对同一服务对象的多个调用依然需要排队。在 Single模式下,当方法调用另外一个服务(Callback是客户端提供的服务)时,方法会阻塞,直到所调用的服务完成。如果方法不能重入,那么因无法接受所调用服务的返回消息(reply message),无法解除阻塞状态而陷入死锁(deadlock)。Reentrant 模式就是为了解决Single 的这种不足,允许方法重入以完成处理过程。
  • Multiple: 和Single、Reentrant 不同,Multiple允许多个客户端同时调用服务方法。不再有锁的问题,同样也不再提供同步保障(synchronizationguarantees)。使用此模式时,我们必须自行使用多线程同步机制(如使用 lock 关键字) 来保证数据成员的读写安全。

背景知识:不可重入函数是指这样的一类函数,不可以在它还没有返回就再次被调用。