WCF实例模型

1、实例模型的配置

        ServiceBehaviorAttribute控制这个设置

2、Per Call服务

             为每个调用创建新的服务对象,增加了整体的吞吐量,状态不会在多次调用中存在,

              服务实例被释放,内存开销小,不会产生并发问题

       PerCall的体系结构

              无状态调用,为每个请求分别实例化业务逻辑和数据层,不存在并发性问题,无状态调用可以共享缓存的内容,引入并发性问题

        InstanceContextMode.PerCall

      

3、Per Session服务

        会话(Session)

       wcf有四种类型的会话:传输会话如TCP或者命名管道,可靠性会话,安全会话,应用程序会话例如PerCall,PerSession,单例

       wcf的会话由客户端发起,asp.net的会话由服务器端初始化

       PerSession模式

       默认为每个客户端/代理创建新的服务对象,吞吐量较少,内存开销增大,状态由服务实例维护,引发多线程客户端的并发问题

      PerSession体系结构

      有状态调用,每个会话可以缓存下游的业务数据和数据层,

       多线程客户端及其之间存在并发性问题,

       状态与会话紧密联系,而不是业务逻辑层

      PerSession模式

       仅当绑定支持会话时,才能够支持会话,可以支持会话的绑定

        NetTcpBinding,NetNamedPipeBinding,WSHttpBinding,WSFederationBinding,WSDualHttpBinding

       basicHttpBinding不支持会话

     配置PerSession

         InstanceContextMode.PerSession

   配置会话

     在服务契约上需要设置能够提供会话功能,SessionMode枚举 Allowed(缺省),NotAllowed,Required

    receiveTimeout 是session的过期时间

    会话ID(SessionID)

            任何形式的会话都会生成会话通道

            会话标识符用于将消息与正确的信道相关联,在会话的整个生命周期中起作用

    会话的生命周期

           会话的生命周期缺省为持续10分钟

           在每个帮顶上可以通过receiveTimeout 设置

           可以通过操作显示的控制生命周期,通过设置OperationContractAttribute的IsInitiating与IsTerminating属性

          

4、单件服务 

        为所有的客户端的所有的调用创建单一的服务对象

        通常会给吞吐量带来负面影响

        潜在的较多内存开箱,单一的大对象

        状态由服务的实例维护,并发性问题

               配置单件

      InstanceContextMode.Single

              单件的体系结构

     无状态单件

     下游的业务逻辑和数据层能被所有的请求共享


会话总结

      PerCall适用于高扩展性和高吞吐量的业务

      PerSession注意会话所带来的开销和潜在的超时问题

      通常避免使用单件模型,除非当多台客户端主机共享某个功能的时候非常有用

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值