实例管理旨在解决服务实例的激活和服务实例生命周期的控制,会话的目的是在于保持相同客户端(服务代理)多次服务调用的状态。

实例上下文

实例上下文是对服务实例的封装,是WCF管理服务实例生命周期的依托,System.ServiceModel.InstanceContext

实例上下文模式

可以简单的理解为服务端的服务实例与客户端的服务代理之间的关联方式。有以下三种:

1 单调模式:对于每个服务调用,不论是相同还是不同的客户端,WCF总是创建一个全新的服务实例和实例上下文对象来处理服务调用请求,当服务操作执行完毕后,实例上下文对象和被封装的服务实例被回收。

2 会话模式:会话的目的在于保持来自相同客户端多次服务调用之间的状态。在会话实例上下文模式下,WCF为每个服务代理对象分配一个单独的服务实例上下文对象,来自相同服务代理的所有服务调用请求,都将分发给相同的服务实例上下文处理。

3 单例模式:WCF为每个服务维护一个并且仅维护一个服务实例上下文。

通过ServiceBehaviorAttribute特性的InstanceContextMode属性进行实例上下文模式的设置。

客户端识别机制

会话是基于客户端和服务的,对于不同的传输协议,WCF采用的客户端识别机制是不同的。

1 传输会话 TCP是基于连接的通信协议,天生就具备会话的特性,TCP连接就是通信双方会话的体现,我们将传输提供原生支持的会话称为传输会话,基于TCp和IPC(通过命名管道提供的跨进程通信)的会话均属于传输会话。

2 非传输会话 Http是无状态的,本身不可能实现针对客户端的识别的,只能将客户端标识置于消息之中,让服务据此识别客户端,WCF在请求消息中添加一个会话ID号来解决客户端的识别问题。

会话模式

System.ServiceModel.SessionMode枚举表示会话模式,Allowed,Required和NotAllowed三个枚举分别表示允许,强制和不允许使用会话。

用于定义服务契约的ServiceContractAttribute特性具有一个SessionMode属性用于定义采用的会话模式

会话的初始与中止

OperationContractAttribute具有两个布尔类型的IsInitiating和IsTerminating属性分别用于定义初始和终止会话的操作。

如果会话尚未开启, IsInitiating属性被设置为True的操作的调用会自动开启会话,而当IsTerminating属性为True的操作被调用之后,当前会话会被关闭。IsInitiating和IsTerminating属性的默认值分别为True和False。

会话模式,绑定与实例上下文模式

1 如果采用单调实例上下文模式,服务实例上下文的提供方式总是基于每次的服务调用的,所以采用单调实例上下文模式的服务永远是单调服务。

2 单例服务决定于单例实例上下文模式

3 会话服务由会话模式,绑定和实例上下午模式三者决定

WCF 实例化与会话的更多相关文章

  1. WCF初探-26:WCF中的会话

    理解WCF中的会话机制 在WCF应用程序中,会话将一组消息相互关联,从而形成对话.会话”是在两个终结点之间发送的所有消息的一种相互关系.当某个服务协定指定它需要会话时,该协定会指定所有调用(即,支持调 ...

  2. <转>WCF实例化模式与高并发处理

    WCF实例化模式与高并发控制 1.实例化模式InstanceModel 1.1 PerCall:单调模式 每次调用都会产生一个实例 例[ServiceBehavior(InstanceContextM ...

  3. WCF系列教程之WCF实例化

    本文参考自http://www.cnblogs.com/wangweimutou/p/4517951.html,纯属读书笔记,加深记忆 一.理解WCF实例化机制 1.WCF实例化,是指对用户定义的服务 ...

  4. 重温WCF之WCF中可靠性会话(十四)

    1.WCF中可靠性会话在绑定层保证消息只会被传输一次,并且保证消息之间的顺序.当使用TCP(Transmission Control Protocol,传输控制协议)通信时,协议本身保证了可靠性.然而 ...

  5. WCF系列教程之WCF中的会话

    本文参考自http://www.cnblogs.com/wangweimutou/p/4516224.html,纯属读书笔记,加深记忆 一.WCF会话简介 1.在WCF应用程序中,回话将一组消息相互关 ...

  6. WCF基础之会话、实例和并发

    这篇笔记是一些概念性的东西. 会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列.wcf的会话模式是通过服务契约的SessionModel进行设置的,其值为枚举,分别为:Allowe ...

  7. WCF - 实例与会话

    实例上下文 实例上下文是对服务实例的封装 是WCF管理服务实例生命周期的依托  一个WCF服务通过ServiceHost进行寄宿 开启服务后当接收到请求 则会判断当前是否存在实例上下文 如果存在 则通 ...

  8. WCF初探-27:WCF中的实例化

    理解WCF中的实例化机制 “实例化”是指对用户定义的服务对象以及与其相关的 InstanceContext 对象的生存期的控制.也就是说我们的客户端程序在调用服务端方法时,需要实例化一个服务端代理类对 ...

  9. 传说中的WCF(11):会话(Session)

    在标题中我加了一个大家都很熟悉的单词——Session,熟吧?玩过Web开发的朋友肯定在梦中都会见到她. 在Web中为什么要会话呢?毕竟每个用户在一个Web应用中可能不止进行一次操作,比如,某二手飞机 ...

随机推荐

  1. mac 下 配置 xhprof

    1: 下载 安装 xhprof wget http://pecl.php.net/get/xhprof-0.9.3.tgztar zxf xhprof-0.9.3.tgzcd xhprof-0.9.3 ...

  2. Oracle设置表只读-alter table xxx read only

    11g以前,当需要设置一个表只读时,我们通过赋予某些用户select权限.但对于表的owner来说,还是可以读写的. 从Oracle 11g开始,我们可以通过一下命令设置表只读或可读可写: alter ...

  3. 如何在Linux中关闭apache服务(转)

    ??? 最近在写一个简单的http服务器,调试的时候发现apache服务器也在机器上跑着,所以得先把apache关掉.当时装apache的时候就是用了普通的sudo get,也不知道装到哪儿了.到网上 ...

  4. Xcode文档下载与安装路径

    https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex ~/Library/Developer/ ...

  5. sql之表连接和group by +组函数的分析

    1.首先我们来先看一个简单的例子: 有[Sales.Orders]订单表和[Sales.Customers]顾客表,表的机构如下 业务要求:筛选  来自“按时打算”国家的用户以及所下的订单数 sele ...

  6. 遍历并修改dictionary的值

    var dictionary = clb_Select.Items.Cast<object>().ToDictionary(item => item.ToString(), item ...

  7. 2328: [HNOI2011]赛车游戏 - BZOJ

    先把一定要减的费用先减掉,就是b*s*len(上坡路),下坡路就设一个初速度,使耗油为0,如果没油了,就无法到达 然后考虑加速 对于长度为len的路,增加v的速度需要len*a*v的油,与len成正比 ...

  8. 5.2:缓存中获取单例bean

    5.2  缓存中获取单例bean 介绍过FactoryBean的用法后,我们就可以了解bean加载的过程了.前面已经提到过,单例在Spring的同一个容器内只会被创建一次,后续再获取bean直接从单例 ...

  9. 内存泄露 memory leak 的原因

    #include <iostream> using namespace std; void foo() { MyClass *x; x = new MyClass(); //指向的丢失了 ...

  10. [转载]MongoDB的$inc修改器

    MongoDB的$inc修改器相当于编程语言中的 “+=”“$inc”只能用于操作数值类型的数据,包括整数.长整数和双精度浮点数,用于其他类型的数据会导致操作失败. >db.users.find ...