WCF并发模型应用特点简要评比

开发 开发工具
WCF并发模型与实例模型是相互配合使用的,我们将会这对他的具体应用方式进行一个详细分析,从而让大家对此加深印象。

WCF中,有很多比较重要的基础知识,是需要我们初学者在学习的过程中加重注意的。今天,我们为大家介绍的就是其中一个比较重要的知识点,WCF并发模型的一些应用特点等。希望可以给大家带来以下帮助。#t#

ServiceBehavior.ConcurrencyMode 用于控制具体服务对象的并发行为。有三种模型:

Single: 默认方式。服务实例是 single-threaded,不接受重入调用(reentrant calls)。也就是说对于同一个服务实例的多个调用必须排队,直到上一次调用完成后才能继续。

Reentrant: 和 Single 一样,也是 single-threaded,但能接受重入调用,至于针对同一服务对象的多个调用依然需要排队。在 Single 模式下,当方法调用另外一个服务(Callback是客户端提供的服务)时,方法会阻塞,直到所调用的服务完成。如果方法不能重入,那么因无法接受所调用服务的返回消息(reply message),无法解除阻塞状态而陷入死锁(deadlock)。Reentrant 模式就是为了解决 Single 的这种不足,允许方法重入以完成处理过程。

Multiple: 和 Single、Reentrant 不同,Multiple 允许多个客户端同时调用服务方法。不再有锁的问题,同样也不再提供同步保障(synchronization guarantees)。使用此模式时,我们必须自行使用多线程同步机制(如使用 lock 关键字) 来保证数据成员的读写安全。
使用方式如下:

  1. [ServiceBehavior(InstanceContextModeInstanceContextMode = 
    InstanceContextMode.PerSession,
    ConcurrencyModeConcurrencyMode=
    ConcurrencyMode.Single)]  
  2. public class SessionModeService : ISessionModeAllowed  
  3. {  
  4. .......  

我们可以看出,WCF并发模型和实例模型(Instance Context Mode)是配合使用的。下面简要的分析:

1、对实例模型为PerCall,任何并发模式都一样的效果,因为每次客户端的调用都是一个新的实例。

2、对实例模型为PerSession,由于服务端会保存客户端的会话状态,如果并发模型为Single,通信方式为双向通信(Duplex),服务端无法接受重入调用,就会产生死锁。所以在实例模式为PerSession,通信方式为双向通信(Duplex)下不能选择WCF并发模型为Single。

3、对实例模型为Single,由于服务端有且仅有一个服务实例,通信方式为双向通信(Duplex),同样会产生死锁。

责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-23 09:34:15

WCF重载

2009-12-21 17:40:25

WCF会话

2010-02-22 16:34:17

WCF性能计数器

2010-02-23 15:58:57

WCF Session

2010-02-23 10:25:29

2010-03-01 10:45:59

WCF集合类

2010-02-25 09:36:28

WCF行为控制

2010-02-25 14:26:48

WCF特点

2010-02-23 10:57:34

WCF Streami

2010-02-06 10:29:52

C++ #define

2010-02-22 13:35:03

WCF异常处理

2010-02-23 09:51:32

WCF MTOM

2010-02-22 17:13:40

WCF会话状态

2010-03-02 18:16:45

WCF可靠性传输

2010-02-23 13:46:37

WCF数据契约

2009-12-21 11:10:53

WCF工具

2010-02-23 16:46:47

WCF并发能力

2009-11-09 10:43:51

WCF Web编程模型

2009-12-22 17:30:47

WCF Address

2009-11-06 09:22:46

WCF应用
点赞
收藏

51CTO技术栈公众号