wcf会话管理

wcf中,客户端调用服务,先创建服务代理,服务代理再将服务调用的soap消息发送给服务端,服务端监听到客户端的请求后,初始化服务,同时构建相关的上下文(Context),这个上下文被称为实例上下文(Instance context),这个过程称为服务激活(Activation)。不同的激活方式体现为不同的实例上下文模式(Instance context model)。不同的实例上下文模式体现为proxy、service调用和service instance之间的对应关系,决定着不同的会话(Session)表现。
wcf支持3种不同的实例上下文模式:单调模式(PerCall),wcf为每一个服务调用创建一个服务实例,调用完成后服务实例被回收;单会话模式(PerSession),会话期间所有的服务调用都绑定到一个服务实例上,会话终止后,服务实例才被回收;单例模式(Singleton),服务寄宿时,创建服务实例,后面所有的服务调用都使用该实例。wcf默认采用PerSession模式。
wcf中对于会话的支持,定义在Service Contract中,设置ServiceContract特性的SessionMode属性来设置服务对会话的支持情况,可以是Allowed(当传入绑定支持会话时,契约也支持会话(默认值))、NotAllowed(契约永不支持会话的绑定)和Required(契约需要会话绑定)中的某一个值。使用ServiceBehavior特性可以以行为的方式设置服务的实例上下文模式,通过设置ServiceBehavior特性的属性InstanceContextMode来实现,该属性可以取值PerCall、PerSession、Singlton。另外还可以使用OperationContract特性指定操作对会话的支持,OperationContract的属性Isinitating为True,那么第一次调用这个方法时候将创建会话,而且此方法必须在调用其它方法前调用,否则将出错;OperationContract的属性IsTerminatin为true,将关闭会话,销毁实例。另外OperationContract的属性IsOneWay指定客户端与服务之间的通信是单工或者双工,默认为False,即双工。

        [ServiceBehavior(InstanceContextMode =  InstanceContextMode.PerCall)]
        [ServiceContract(SessionMode = SessionMode.Required)]
        public interface IService
        {
            [OperationContract(IsOneWay = true, IsInitiating = true, IsTerminating = false)]
            void  FirstCall(string input)          
            [OperationContract(IsInitiating = false,IsTerminating =true)]
            double GetResult();
        }

wcf中客户端对服务的调用,需要使用Proxy,所以wcf中会话周期有下面两种表现形式:(1)Session的周期和Proxy的周期绑定,这种方式默认支持Session。(2)Session的周期绑定到开始和终止Session的方法调用之间的时间内,这种方式通过指定OperationContract的IsInitiating和IsTerminating属性显式指定开始和终止Session的Operatoin。
wcf中的消息是通过管道来传递的,管道由绑定来创建,所以wcf中的会话还需要得到绑定的支持,basicHttpBinding不支持会话,所以在使用basicHttpBinding绑定的服务调用中,就算在服务契约中指定了会话支持,也是不能使用会话的。这时可以修改为支持会话的wsHttpBinding绑定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值