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) ...
随机推荐
- c++11 std::prev、std::next、std::advance与auto 使用
auto 定义变量时放在变量前,无需知道具体变量类型,系统可自行推断类型,减少编程工作,特别是在模板使用时,使用更方便. 下面简单例子: auto a=; auto b='a'; auto s=&qu ...
- log4j教程 5、示例程序
前面我们已经看到了如何创建一个配置文件.本教程将讲解如何生成调试信息和日志在一个简单的文本文件. 下面是我们的例子中创建了一个简单的配置文件.这里再重复一次: 下载最新的Log4j库:http://l ...
- rsync数据同步工具的配置
rsync数据同步工具的配置 1. rsync介绍 1.1.什么是rsync rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于 unix ...
- Spring3的quartz定时任务
要使用定时任务,需要将quartz-1.5.2.jar加入lib,没有的话可以从下面地址下载: quartz-1.5.2.jar 有了这个再做个配置文件appctx-quartz.xml: <? ...
- VB断点调试
最近都在敲机房收费系统,这个系统是我们第一次自己在没有源代码的情况下进行的系统. 写程序的时候逻辑非常重要,可是我们还要清楚非常多时候你以为的并非你以为的! 就像在敲机房的时候,我们明明理清了逻辑.并 ...
- OpenStack 网络总结之:openstack中网络的基本概念
原文:openstack-install-guide-yum-icehouse.pdf/7. Add a networking service/Networking concepts OpenStac ...
- 【VAB】获取库文件地址
如何获取Excle库文件地址呢?具体代码如下: Public Sub 获取Excel库文件夹的路径() MsgBox "库文件夹的路径是: " & Application. ...
- mongodb在Windows安装配置及遇到的问题、java连接测试
一.安装 1.访问mongodb的官网http://www.mongodb.org/downloads下载64bit的包,我下载的是mongodb-win32-x86_64-2008plus-ssl- ...
- 在Excel2003中给定区域填充随机数?
1.选中一个单元格,输入“=RAND()*40+60”,点CTRL+ENTER键,即可完成公式填充. 2.鼠标悬停单元格边框右下角,出现“+”符号,左键拉动实现格式复制,从而填充整个区域随机数. ★题 ...
- 类中的internal成员可能是一种坏味道
前言 最近除了搞ASP.NET MVC之外,我也在思考一些编程实践方面的问题.昨天在回家路上,我忽然对一个问题产生了较为清晰的认识.或者说,原先只是有一丝细微的感觉,而现在将它和一些其他的方面进行了联 ...