WCF基础之大型数据和流
在WCF的实际应用中,有可能存在10M,100M甚至G级别的传输,这个时候我们就不得不考虑编码和传输模式,当然得选择相应的绑定(binding)


如上图所示,我可以直接使用系统提供的相应绑定,然后设置需要的模式即可,要启用MTOM消息编码,要选择相应的绑定,如BasicHttpBinding或者WSHttpBinding,然后将该绑定的messageEncoding设为Mtom,而流模式则有BasicHttpBinding,NetTcpBinding和NetNamedPipeBinding三种绑定,设置transferModel的值为Streamed。当然也可以自定义绑定,然后设置所需的编码和传输模式。
<customBinding>
<binding name="TestCustomBinding">
<textMessageEncoding messageVersion="Soap12WSAddressing10" />
<httpTransport transferMode="/>
</binding>
</customBinding>
如上所示使用的是TextMessageEncodingBindingElement编码,WCF的编码器有三个:
TextMessageEncodingBindingElement文本消息编码器是默认的编码器,读取和编写标准SOAP1.1/SOAP1.2文本消息,不会对二进制消息做任何处理。
MtomMessageEncodingBindingElement文本编码器实现对二进制数据的处理,默认情况下,任何绑定都不会使用。仅当二进制数据的大小超多1kb的时候才会具有优势,如果启用了MTOM编码,但是二进制数据并未超过1kb,则还是使用basic64编码。
BinaryMessageEncodingBindingElement是Net*绑定的默认编码器,基于通信双方都是WCF。
如果对互操作性要求较高,文本消息编码是最优解,而二进制则是其他任意通信路径的最佳选择。
上面简单介绍了编码模式,再说说传输的流模式,未启用流模式时,WCF以整体缓冲的模式来处理消息,正如文章开头将的那样如果是大型数据,将会耗尽整个系统的资源。流模式是当数据无法分段、消息必须以及时的方式传输或者当传输启动时数据还未完全就绪时考虑启动的模式,或者说流模式只能对大型数据启用。有得必有失,当启用流模式时,我们无法做到以下:
1、无法对消息正文进行数字签名,因为数字签名需要对整个消息内容进行哈希计算,采用流模式时,构造和发送消息头时,正文还未完全就绪,因此无法进行签名。
2、只能对流采用传输级安全,并且无法打开可靠会话。
但是与BasicHttpBinding不同,NetTcpBinding和NetNamedPipeBinding具有内在的可靠传递和基于连接的会话支持,所以这两个绑定受上述两点的影响非常小。
好了就说到这儿,有些地方比较生硬,对那些跟我一样在WCF方面是新手而又看了这篇文章的朋友说声对不起,其实我看徐长龙的这一系列教程,是为了方便我都读《WCF服务编程》《WCF技术内幕》这两本书。
WCF基础之大型数据和流的更多相关文章
- WCF 基础框架
WCF 基础框架: 1,契约:契约书一语个服务公共接口的一部分,一个服务的契约定义了服务端公开的方法,使用的传递协议,可访问的地址,传输的消息格式等内容,主要包括数据契约,消息契约,服务契约等. 2, ...
- WCF服务编程 读书笔记——第1章 WCF基础(2)
续:第1章 WCF基础(1) 元数据交换 服务有两种方案可以发布自己的元数据.一种是基于HTTP-GET协议提供元数据, 另一种则是后面将要讨论的使用专门的终结点的方式.WCF能够为服务自动提供基于H ...
- WCF服务编程 读书笔记——第1章 WCF基础(1)
第1章 WCF基础 本章主要介绍WCF的基本概念.构建模块以及WCF体系架构,以指导读者构建一个简单的WCF服务.从本章的内容中,我们可以了解到WCF的基本术语,包括地址(Address).绑定(Bi ...
- TWaver 3D应用于大型数据中心(续)
在2014年11月份,我们当时发了一篇有关TWaver HTML5 3D应用于大型数据中心的文章,该blog比较详细的描述一些常用的功能的实现方法,比如:动态添加机柜,告警,温度,湿度等相关的功能的具 ...
- IO流总结---- 字节流 ,字符流, 序列化 ,数据操作流,打印流 , Properties 集合
笔记内容: 什么是流 字节流 字符流 序列化 数据操作流(操作基本数据类型的流)DataInputStream 打印流 Properties 集合 什么是流: 流是个抽象的概念,是对输入输出设备的抽象 ...
- Java 基础(四)| IO 流之使用文件流的正确姿势
为跳槽面试做准备,今天开始进入 Java 基础的复习.希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆. 一.什么是 IO 流? 想象一个场景 ...
- WCF基础教程之异常处理:你的Try..Catch语句真的能捕获到异常吗?
在上一篇WCF基础教程之开篇:创建.测试和调用WCF博客中,我们简单的介绍了如何创建一个WCF服务并调用这个服务.其实,上一篇博客主要是为了今天这篇博客做铺垫,考虑到网上大多数WCF教程都是从基础讲起 ...
- 2015年12月28日 Java基础系列(六)流
2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流
- 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)
对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2) ...
随机推荐
- 机器学习算法实践:决策树 (Decision Tree)(转载)
前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...
- Error:[$parse:lexerr]
1.错误描写叙述 2.错误原因 由错误提示可知,有关AngularJS代码不符合语法,导致报错 3.解决的方法 检查发现,title标签中的data-ng-bind属性使用方法有误 <title ...
- Rails中nil? empty? blank? present?的区别
.nil? Ruby方法 .nil?方法被放置在Object类中,可以被任何对象调用,如果是nil则返回true 在Rails中只有nil对象才会返回true nil.nil? #=> true ...
- 如何安装Android模拟器到VM虚拟机
1 像普通安装一样找到ISO镜像文件,该镜像文件名称为"android-x86-2.2-generic.iso",该镜像文件可以从谷歌官网得到 http://code.google ...
- react-native 常用组件的用法(二)
ScrollView组件 能够调用移动平台的ScrollView(滚动视图)的组件,同时还集成了触摸锁定的“响应者”系统.注意一定要给scrollview一个高度,或者是他父级的高度. 常用方法 on ...
- python例子三
例一:匹配长度为1-15的域名 #-*-encoding:utf--*- import re regex=re.compile('^www[.][a-z]{1,15}[.](com|org)') m1 ...
- lodash 移除假值数组 compact
创建一个移除了所有假值的数组.例如:false.null. 0."".undefined, 以及NaN 都是 “假值”. <!DOCTYPE html> <htm ...
- Repeater绑定List泛型对象
后台: public void BindData() { List<WeiBo> DataList = new List<WeiBo>(); ...
- POJ1328 Radar Installation 【贪心·区间选点】
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 54593 Accepted: 12 ...
- unity3d动态加载资源
在Unity3D的网络游戏中实现资源动态加载 分类: 最新学习2012-06-14 13:35 1127人阅读 评论(0) 收藏 举报 网络游戏nullvectorjson游戏string 用Unit ...