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

会话,借用百科上的描述就是一个客户与服务器之间的不中断的请求响应序列。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();
; i < ;i++ )
    Console.WriteLine(myClient.TestSession());
Console.Read();

服务端

public class WCFService:IWCFService
{
     ;
     public int TestSession()
     {
         ;
     }
}

Required+Single

Required+PerCall

Required+PerSession

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

WCF基础之会话、实例和并发的更多相关文章

  1. WCF服务编程 读书笔记——第1章 WCF基础(2)

    续:第1章 WCF基础(1) 元数据交换 服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据, 另一种则是后面将要讨论的使用专门的终结点的方式.WCF能够为服务自动提供基于H ...

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

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

  3. WCF服务类的实例模式(本文为转载)

    WCF开发时如何选择正确的实例模式(InstanceMode)?   在使用WCF实例模型时,你是否思考过这几个的问题: ”WCF中的实例模式如何正确应用”? ”使用WCF中的实例模式有何原则可以遵循 ...

  4. [WCF编程]8.服务实例的生命周期

    一.服务实例的生命周期概览 我们已经直到,通过显式调用Close方法或等待默认的超时时间到来,都可以释放服务实例.但是,在会话连接里,经常需要按一定顺序调用方法. 二.分步操作 会话契约的操作有时隐含 ...

  5. WCF基础教程之异常处理:你的Try..Catch语句真的能捕获到异常吗?

    在上一篇WCF基础教程之开篇:创建.测试和调用WCF博客中,我们简单的介绍了如何创建一个WCF服务并调用这个服务.其实,上一篇博客主要是为了今天这篇博客做铺垫,考虑到网上大多数WCF教程都是从基础讲起 ...

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

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

  7. WCF 实例化与会话

    实例管理旨在解决服务实例的激活和服务实例生命周期的控制,会话的目的是在于保持相同客户端(服务代理)多次服务调用的状态. 实例上下文 实例上下文是对服务实例的封装,是WCF管理服务实例生命周期的依托,S ...

  8. WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构

    原文:WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 细算起来,已经有好几个月没有真正的写过文章了.近半年以来,一直忙于我的第一本WCF专著<WCF技术剖析>的写作,一直 ...

  9. WCF 基础框架

    WCF 基础框架: 1,契约:契约书一语个服务公共接口的一部分,一个服务的契约定义了服务端公开的方法,使用的传递协议,可访问的地址,传输的消息格式等内容,主要包括数据契约,消息契约,服务契约等. 2, ...

随机推荐

  1. 系统封装 如何修改别人的PE为己所用

    我们以修改"我心如水 WIN7PE_16.99.1 维护版.ISO"为例,整个ISO的核心文件就是这个BOOT.WIM,我们先把他提取出来. 然后用在本教程第一章学到的东西,用AI ...

  2. Navicat Premium 连接 Oracle 数据库

    Navicat Premium 是一个可多重连接的数据库管理工具,它可让你以单一程序同時连接到 MySQL.SQLite.Oracle 及 PostgreSQL 数据库,让管理不同类型的数据库更加方便 ...

  3. 【Shell】建立一个脚本统计当前登录用户数

    who命令 who命令是显示目前登陆系统的用户信息,执行who命令可以得知目前哪些用户登入系统,单独执行who命令会列出登入账号,使用的终端机,登入的时间以及从何处登入或正在使用哪个显示器. 统计用户 ...

  4. Oracle LOB字段判空

    dbms_lob.getlength() dbms_lob.getlength(null) 会报错--- Oracle 默认为clob字段插入empty_clob()

  5. Effective C++ Item 25 考虑写出一个不抛异常的swap函数

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛 ...

  6. Burp Suite Intruder的4种攻击类型

    位置:Intruder>1(通常为数字)>Positions,Attack Type下拉有四种,分别为 一.Sniper(狙击手模式) 狙击手模式使用一组payload集合,它一次只使用一 ...

  7. centos安装pip Xvfb Selenium

    pip安装命令: python -V wget https://bootstrap.pypa.io/get-pip.py python get-pip.py Xvfb安装命令: yum install ...

  8. SQL Server中LIKE和PATINDEX的用法

    在SQL Server中,能使用通配符的只有2个:LIKE.PATINDEX. 不过LIKE支持2种通配符转义,无限制最全面:而PATINDEX只支持最简单的通配符转义([]转义),限制较多. LIK ...

  9. 使Gallery时设置居左显示

    Gallery中的图片默认是居中显示的.可是在非常多情况下我们须要它居左显示,这样做有一个简单方法.就是把Gallery的left设置为负多少,如以下的方法: Drawable drawable=ca ...

  10. js 元素Dom新建并插入页面createElement

    纯js var o = document.createElement('script'); o.type = 'text/template'; o.id = 'demo'; document.docu ...