WCF基础之会话、实例和并发
2015-08-20 20:35
176 查看
这篇笔记是一些概念性的东西。
会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列。wcf的会话模式是通过服务契约的SessionModel进行设置的,其值为枚举,分别为:Allowed,改值为默认值,客户端连接,选择会话或者不建立会话;Required,必须建立会话;NotAllowed,禁止会话。WCF的会话是可以通过应用程序显示的进行启动和终止,是有序的,是不存在与会话相关的数据存储区的。
系统提供的会话类型:
System.ServiceModel.Channels.SecurityBindingElent支持基于安全的会话,通信两端都必须采用统一的安全对话。
System.ServiceModel.Channels。ReliableSessionBindingElement元素实现WS-ReliableMessaging规范,并提供对可靠会话的的支持,可配置消息按顺序传递且只传递一次,从而保证消息在会话期间即使经过多个节点也可以确保安全。
WSHttpBiding默认情况下只使用对消息进行加密和数字签名的安全会话。
NetTcpBinding支持基于TCP/IP的会话,以确保所有消息都是由套接字级别的连接进行关联。
NetMsmqBinding提供msmq数据会话。
实例化模式是通过设置InstanceContext的属性来实现的,值为枚举:PerCall,每次请求都是一个新的InstanceContext;PerSession,每个会话创建一个新的InstanceContext;Single,所有会话都共用一个InstanceContext。
并发模式也有三种,通过ConcurrencyMode属性设置(对于并发这个我也没弄明白,等我多写几个demo再说):single允许每个InstanceContext同时只能有一个线程处理其中的消息;Mulitple允许拥有多个同时处理消息的线程,服务必须实现线程安全;Reentrant:每个服务实例智能处理一个消息,但可以接受重入的操作调用,仅当服务通过wcf客户端对象提供服务时才接受这些调用。
这下面是我在会话模式下,不同的实例化模式下的调用结果:
客户端
服务端
Required+Single
Required+PerCall
Required+PerSession
其他的几种可以自己再试试。
会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列。wcf的会话模式是通过服务契约的SessionModel进行设置的,其值为枚举,分别为:Allowed,改值为默认值,客户端连接,选择会话或者不建立会话;Required,必须建立会话;NotAllowed,禁止会话。WCF的会话是可以通过应用程序显示的进行启动和终止,是有序的,是不存在与会话相关的数据存储区的。
系统提供的会话类型:
System.ServiceModel.Channels.SecurityBindingElent支持基于安全的会话,通信两端都必须采用统一的安全对话。
System.ServiceModel.Channels。ReliableSessionBindingElement元素实现WS-ReliableMessaging规范,并提供对可靠会话的的支持,可配置消息按顺序传递且只传递一次,从而保证消息在会话期间即使经过多个节点也可以确保安全。
WSHttpBiding默认情况下只使用对消息进行加密和数字签名的安全会话。
NetTcpBinding支持基于TCP/IP的会话,以确保所有消息都是由套接字级别的连接进行关联。
NetMsmqBinding提供msmq数据会话。
实例化模式是通过设置InstanceContext的属性来实现的,值为枚举:PerCall,每次请求都是一个新的InstanceContext;PerSession,每个会话创建一个新的InstanceContext;Single,所有会话都共用一个InstanceContext。
并发模式也有三种,通过ConcurrencyMode属性设置(对于并发这个我也没弄明白,等我多写几个demo再说):single允许每个InstanceContext同时只能有一个线程处理其中的消息;Mulitple允许拥有多个同时处理消息的线程,服务必须实现线程安全;Reentrant:每个服务实例智能处理一个消息,但可以接受重入的操作调用,仅当服务通过wcf客户端对象提供服务时才接受这些调用。
这下面是我在会话模式下,不同的实例化模式下的调用结果:
客户端
MyService.WCFServiceClient myClient = new MyService.WCFServiceClient(); for (int i = 0; i < 5;i++ ) Console.WriteLine(myClient.TestSession()); Console.Read();
服务端
public class WCFService:IWCFService { int m = 0; public int TestSession() { return m += 1; } }
Required+Single
Required+PerCall
Required+PerSession
其他的几种可以自己再试试。
相关文章推荐
- CODEVS 3289 花匠
- 杭电1166敌兵布阵(线段树)
- ubuntu 中英文切换引起的编码问题
- iOS如何获取手机当前的网络状态
- 生成不重复long型数字
- 【JavaScript】冒泡排序,字符串排序,数字排序
- C++知识点随笔(五):虚继承
- Catch That Cow
- Codeforces Round #260 (Div. 2) B. Fedya and Maths(循环结)
- java synchronized详解
- MySQL数据库优化总结
- Android(java)学习笔记184:生成4种模式的文件
- MySQL性能测试(一)——RHEL 7.1, MySQL 5.6.25, sql-bench
- github 修改tag
- hdu 5411 CRB and Puzzle 矩阵快速幂
- POJ 1703 Find them, Catch them(并查集拓展)
- 【Cocos2dx】使用CCScale9Sprite拉伸图片
- IOS 警告 收集
- 堆排序
- android之BitmapFactory.Options的使用