你的位置:首页 > ASP.net教程

[ASP.net教程]WCF基础之会话、实例和并发


这篇笔记是一些概念性的东西。

会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列。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

 

其他的几种可以自己再试试。