实例模型-学习笔记

来源:互联网 发布:日本身份证 知乎 编辑:程序博客网 时间:2024/06/03 22:41

调用场景

经典的C/S程序

客户端使用远程,有状态的对象并且在其生命周期内进行控制

分布式,可扩展的应用程序

通过及时释放远程对象来节省资源的使用

分布式的单件

多个客户端共享状态

经典的无状态的Web服务调用


实例模型

控制服务实例的生命周期

InstanceContextMode枚举

PerCall 无状态的服务调用,每次调用是一种独立调用,调用之间无相互关联

PerSession 在session范围内是有状态的调用

Single

ServiceBehavriorAttibute控制这个设置


PerCall为每个调用创建新的服务对象

服务可以增加整体吞吐量(服务需要的时候被创建,用完即被销毁)

1.状态不会在多次调用中存在

2.服务实例被释放

3.内存开销小

4.不会产生并发问题

perCall的体系结构

无状态的调用

为每个请求分别实例化业务逻辑层和数据层

不存在并发性问题




会话(session)

wcf有四种类型的会话

传输会话:如TCP和命名管道

可靠性会话:消息的投递,可以确认的发到服务端,还有消息的有序性

安全会话:加密

应用程序会话

wcf会话和ASP.NET的会话之间的区别:wcf会话由客户端发起,asp.NET的会话由服务端进行初始化

perSession会引入客户端多线程的问题




session的模型

SessionMode枚举:

Allowed(缺省)实例有可能是perSession,有可能是PerCall,主要看具体的Banding

NotAllowed

Required

会话的缺省生命周期10分钟,在绑定上可以设置receivetimeout来设定


如果在函数中设置IsTerminating=true,那么在函数调用之后会话就会被清除掉,不用等到会话超时。

IsInitiating也是一样,如果设置为true,那么之前没建立session则建立session


单件模型

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



0 0
原创粉丝点击