WCF基础
来源:互联网 发布:网络诽谤罪立案标准 编辑:程序博客网 时间:2024/04/27 14:35
http://blog.csdn.net/fangxinggood/article/details/6106228
http://www.cnblogs.com/webabcd/archive/2007/12/05/983453.html
http://www.cnblogs.com/menglin2010/archive/2012/04/23/2229893.html
ConcurrencyMode 并发模型
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、对实例模型为PerCall,任何并发模式都一样的效果,因为每次客户端的调用都是一个新的实例。
2、对实例模型为PerSession,由于服务端会保存客户端的会话状态,如果并发模型为Single,通信方式为双向通信(Duplex),服务端无法接受重入调用,就会产生死锁。所以在实例模式为PerSession,通信方式为双向通信(Duplex)下不能选择并发模型为Single。
3、对实例模型为Single,由于服务端有且仅有一个服务实例,通信方式为双向通信(Duplex),同样会产生死锁。
。Single: 默认方式。服务实例是 single-threaded,不接受重入调用(reentrant calls)。也就是说对于同一个服务实例的多个调用必须排队,直到上一次调用完成后才能继续。
。Reentrant: 和 Single 一样,也是 single-threaded,但能接受重入调用,至于针对同一服务对象的多个调用依然需要排队。在 Single 模式下,当方法调用另外一个服务(Callback是客户端提供的服务)时,方法会阻塞,直到所调用的服务完成。如果方法不能重入,那么因无法接受所调用服务的返回消息(reply message),无法解除阻塞状态而陷入死锁(deadlock)。Reentrant 模式就是为了解决 Single 的这种不足,允许方法重入以完成处理过程。
。Multiple: 和 Single、Reentrant 不同,Multiple 允许多个客户端同时调用服务方法。不再有锁的问题,同样也不再提供同步保障(synchronization guarantees)。使用此模式时,我们必须自行使用多线程同步机制(如使用 lock 关键字) 来保证数据成员的读写安全。
使用方式如下:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession,ConcurrencyMode=ConcurrencyMode.Single)]
public class SessionModeService : ISessionModeAllowed
{
.......
}
我们可以看出,并发模型和实例模型(Instance Context Mode)是配合使用的。下面简要的分析:public class SessionModeService : ISessionModeAllowed
{
.......
}
1、对实例模型为PerCall,任何并发模式都一样的效果,因为每次客户端的调用都是一个新的实例。
2、对实例模型为PerSession,由于服务端会保存客户端的会话状态,如果并发模型为Single,通信方式为双向通信(Duplex),服务端无法接受重入调用,就会产生死锁。所以在实例模式为PerSession,通信方式为双向通信(Duplex)下不能选择并发模型为Single。
3、对实例模型为Single,由于服务端有且仅有一个服务实例,通信方式为双向通信(Duplex),同样会产生死锁。
-----------------------------------------------------------------------------------------------------------------------------------------------------------
在WCF/WebService中,如果返回值过大,比如Array,List,DataSet等达到一定数量级的话:
<behavior name="NewBehavior">
<dataContractSerializer maxItemsInObjectGraph="65536000" />
</behavior>
- WCF基础
- WCF基础
- WCF基础
- WCF基础
- WCF基础
- WCF基础
- 【WCF】基础
- WCF基础
- WCF基础
- WCF基础
- WCF基础
- WCF基础
- 【wcf】——WCF基础
- WCF 学习笔记 一WCF 基础(WCF基础概念)
- wcf学习基础篇
- wcf基础1
- WCF服务编程基础
- Wcf 基础编程
- 鸡蛋饭
- J2EE web项目,绝对路径和相对路径如何设置与获取
- ABAP检查日期时间合法性的函数
- 尊敬的编辑们,我的文章已经删除了,麻烦恢复我的权限好吗?谢谢!
- 原创安装大全啊,安装配置:celery,rabbitMQ,NodeJs,Maven + Nexus,Django,Python,RabbitMQ,TTserver,Easy_install,redis
- WCF基础
- Delphi EmbeddedWB 遍历Frames并执行子frame的js脚本
- 线程同步
- 嵌入式LINUX识别U盘的问题
- 设计师的魔法棒——格式塔原理!
- Oracle中将一个字段拆分成多个行记录
- Python调用C/C++的种种方法
- delphi 网页提交按钮执行点击事件
- Python进制转换(二进制、十进制和十六进制)