关于MTOM的基本概念

   提到MTOM消息优化传输机制,通常的实验结果是使用MTOM传输数据会提高大约33%的性能。 消息传输优化机制 (MTOM) 标准允许将消息中包含的大型数据元素外部化,并将其作为无任何特殊编码的二进制数据随消息一起传送。MTOM 消息会打包为多部分/相关 MIME 序列,放在SOAP 消息中一起传送。

  我们需要了解一些相关的概念。什么是BASE64编码、MTOM消息优化传输机制、MIME。这些对于我们理解MTOM消息优化传输机制问题非常的必要。下面就来做下介绍。

  1.1 BASE64编码

  BASE64编码 的原理很简单,其方法是,将输入数据流每次取6 bit(每bit代表1位二进制),不足6bit的补0,这样,每3个8位字节将编码为4个6位字节(3×8 → 4×6);不满4个字节的以“=”填充。其实这4个六位字节 仍然是8位,只不过高两位被设置为0。当一个字节只有6位有效时,它的取值空间为0 到 2的6次方减1 即63,也就是说被转换的Base64编码的每一个编码的取值空间为(0~63)。这样就可以将3个8位字节,转换为4个字节,这4个转换的字节都可以映射到字符中。也即数据都可以使用字符编码代替。 因为转换后的字符串要比原来的多一个字节,长1/3。因此编码后的数据长度增加到4/3倍。这里也是为什么使用SOAP消息效率比MTOM低的原因。因为SOAP使用XML语言进行消息传递,XML是基于BASE64编码的语言。

1. 2MIME

  MIME表示多用途Internet邮件扩允协议。MIME扩允了基本的面向文本的Internet邮件系统,以便可以在消息中包含二进制附件。MIME(Multipurpose Internet Mail Extentions),一般译作"多用途的网络邮件扩充协议"。顾名思义,它可以传送多媒体文件。 MIME (Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)是创建用于电子邮件交换,网络文档,及企业网和Internet上的其他应用程序中的文件格式的规范。

  1.3 MTOM消息优化传输

   MTOM 全称Message Transmission Optimization Mechanism,即消息传输优化机制。它提出的模型适用于大量数据的交互情况。针对Base64编码情况带来的开销提出的解决方案。当数据量小的时候,SOAP依然使用XML进行消息的传递。

   但是在大量数据情况下,如果数据依然进行Base64编码,会带来33%的额外开销,这样的情况对于大量数据交换的情况是无法容忍的。MTOM 就是针对SOAP 消息传输的基础上提出的改进办法。对于大量数据的传递,不会进行进行Base64编码,而是直接以附件的二进制原始数据的形式封装在SOAP消息的MIME 部分,进行传输。SOAP 消息通过指向随其发送的 MIME 部分来引用二进制内容,另外包括SOAP基本的XML 数据,这些还是Base64编码。因为此模型与简单邮件协议SMTP 模型基本一致。

  MTOM通过简化大量数据的编码过程,从而提高数据的处理效率。因为SOAP消息等必要的信息,MTOM 也有一些必要的开销。MTOM仅在二进制数据元素的大小超过大约 1 KB 时,才能体现出其优势

如何在WCF中使用MTOM

其实很简单,只要设置Binding的MessageEncoding为MTOM即可。无语了吧

    <bindings><wsHttpBinding><binding name="mybinding" messageEncoding="Mtom"></binding></wsHttpBinding></bindings>

关于MTOM与其他几种编码的比较,还可以参考下面这个文章

http://developers.de/blogs/damir_dobric/archive/2008/02/02/wcf-mtom-binary-data-transmission.aspx

转载于:https://www.cnblogs.com/chenxizhang/archive/2010/04/09/1708621.html

MTOM以及在WCF中的应用相关推荐

  1. WCF中的序列化[上篇]

    SOA 和Message Windows Communication Foundation (WCF) 是基于面向服务架构(Service Orientation Architecture--SOA) ...

  2. WCF中绑定的简单介绍

    绑定基本概念 绑定就是一个从通用基础类型派生出来的运行时类型.绑定中描述了传输协议,消息编码格式和其他的一些用于通信的通信协议. 绑定的种类介绍 类型名 配置文件使用名 描述 BasicHttpBin ...

  3. WCF中常用的binding方式

    WCF中常用的binding方式: BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务.用于兼容旧的Web ASMX 服务. WSHttpBinding: 比 Bas ...

  4. 在WCF中实现双工通信(转载)

    首先声明此文章是转载博客园蒋老师之作:http://www.cnblogs.com/artech/archive/2007/03/02/661969.html 双工(Duplex)模式的消息交互方式体 ...

  5. 数字证书及在WCF中的应用

    一 概念 1.内容 证书的发布机构     证书的有效期     证书所有者(Subject)     签名所使用的算法     指纹以及指纹算法 公钥     私钥 2.存储区 3.有效性 二 作用 ...

  6. 在WCF中使用Flag Enumerations

    在WCF中使用Flag Enumerations 请看MSDN示例: [DataContract][Flags] public enum CarFeatures {     None = 0,     ...

  7. Entity Framework在WCF中序列化的问题

    问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生. 接收对 http://localhost:5115/ReService.svc 的 ...

  8. wcf中的使用全双工通信(转)

    wcf中的使用全双工通信 wcf中的契约通信默认是请求恢复的方式,当客户端发出请求后,一直到服务端回复时,才可以继续执行下面的代码. 除了使用请求应答方式的通信外,还可以使用全双工.下面给出例子: 1 ...

  9. WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

    按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作 ...

  10. WCF 中序列化自定义依赖属性类

    众所周知.NetFramework中存在着两种依赖属性,他们也分别集成着不同但名称相同的依赖对象: System.Windows.DependencyProperty:System.Windows.D ...

最新文章

  1. tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)
  2. VTK:PolyData之IntersectionPolyDataFilter
  3. python 讲课_Python语言
  4. ASP.NET MVC的生命周期与网址路由
  5. api有哪些 javasocket_socket及socket java api
  6. 火狐ok谷歌适配_“ OK Google”在锁定手机上的安全性越来越高
  7. java 外螺旋矩阵_螺旋矩阵的java实现
  8. jQuery 计时器(jquery timers)简单应用
  9. oracle查询相同想,返回相同总和的查询-Oracle SQL
  10. 小米12系列或首发2亿像素主摄:配原生1英寸超大底
  11. 如何用计算机制作公式,常用的那些软件能做公式编辑器
  12. Delphi7--基本数据类型和表达式
  13. linux系统添加中文字体后不生效
  14. 【论文】清华九歌作诗系统
  15. 2012年8月 发散的安全焦点
  16. 银行中台与互联网中台有什么不同?该怎么建?
  17. 车载网络: ECU (电子控制单元)
  18. 机器学习入门的绝佳材料:斯坦福大学机器学习课程原始讲义(含公开课视频)
  19. 前端常用js方法工具封装
  20. 2023最新软件测试学习思维导图(从小白到大师进阶之路)

热门文章

  1. Win7安装curl工具、解决PowerShell ISE中文乱码问题
  2. Webpack4 学习笔记一初探Webpack
  3. Spring Security构建Rest服务-1401-权限表达式
  4. Python成员运算符
  5. 【BZOJ 1038】[ZJOI2008]瞭望塔
  6. 推荐最近使用的一个APP
  7. Runtime.exec使用错误导致延迟.md
  8. hasCode in Java
  9. [读书笔记]iOS 7 UI设计 对比度
  10. 剑指offer面试题13:O(1)删除链表结点