文档章节

web服务与二进制数据传输介绍

柳哥
 柳哥
发布于 2014/05/21 08:15
字数 847
阅读 1566
收藏 9

图片、影音等类似的这些二进制数据如何作为参数传入,或者作为返回值从web服务操作中返回?只有进行类型转换了。基于SOAP的web服务用到的数据类型并不只局限于纯文本,但是这些web服务对于二进制数据的使用引发了重大的效率问题

在基于SOAP的web服务中,可以利用如下两种通用的做法来处理任意的二进制数据:

  • 二进制数据可以通过某种模式编码,比如使用Base64编码规范,然后作为SOAP消息体中的单元进行传送。比如,一个可以向请求者返回图片格式的服务操作可以简单地返回一个java.awt.Image对象,它是java中对二进制图像数据进行包装的类。那么图像所包括的byte数据可以进行编码后作为SOAP消息体进行传输。不利的一面就是Base64编码或类似的编码格式将会导致发送单元相比编码前的二进制数据而言,在内容多少上至少膨胀三分之一。简而言之,像Base64这样的byte编码将导致数据量进一步膨胀。

  • 二进制数据可以作为SOAP消息的一个或多个附件的方式发送。回顾前面,SOAP消息由一个SOAP part组成,在其中包括一个可选的消息报头和可能为空的消息报体以及可选的SOAP附件。附件的数据内容可以是任何定义的MIME类型,包括:audio/x-wav、video/mpeg及image/jpeg等这些多媒体类型。JAX-B提供了MIME类型和Java类型间必需的映射:其中MIME类型image/*map对应java Image类型,剩下其他多媒体类型对应DataHandler。

在web服务中往返于发送者和接收者之间传输的二进制数据,通常采用附件的方式传输而不是对这些数据编码后传输,因为这种选择避免了数据量的膨胀。不利的一面是数据的接收者必须处理这些未经过处理的byte数据,比如将这些byte数据再转换为图像或声音类型。

使用SOAP附件传输二进制数据的3种选择

SOAP附件方式存在3种基本的选择:SwA(SOAP with Attachments),SOAP规范中所指定的附件方式;DIME(Direct Internet Message Encapsulation),轻量级的但是有些过时的编码格式;MTOM(Message Transmission Optimization Mechanism),基于XOP(XML-Binary OPtimized Packaging)。JWS提供了DIME方式的扩展,主要目的就是针对微软客户端的互用性提供支持。一直到Microsoft Office 2003发布为止,由微软宏语言(VBA)编写的web服务客户端只能够处理DIME编码的附件。SwA方式也有严重缺点,SwA很难处理Document绑定样式的服务,而这种绑定样式目前已经成为一种标准。况且,像微软的.Net平台也不支持SwA方式。MTOM通过了W3C认证,享有广泛的支持;因此,在基于SOAP的web服务二进制数据传输中,MTOM代表了目前高效、流行的数据交互方式。



© 著作权归作者所有

柳哥
粉丝 207
博文 405
码字总数 347782
作品 0
杭州
技术主管
私信 提问
Apache Thrift介绍

Thrift是为了解决facebook系统中各系统之间大数据量的传输通讯以及系统之间语言环境不同需要跨平台这一特性而创造的。所以thrift可以支持多种程序语言,例如: C++, C#, Cocoa, Erlang, Haske...

吕坤
2013/02/19
374
0
互联网分层架构系列之一: 分层的本质

上图是一个典型的互联网分层架构: 客户端层:典型调用方是browser或者APP 站点应用层:实现核心业务逻辑,从下游获取数据,对上游返回html或者json 数据-缓存层:加速访问存储 数据-数据库层...

wqhlmark64
2018/04/12
0
0
互联网分层架构的本质

本文转载自公众号 架构师之路 作者:沈剑 58同城首席架构师 上图是一个典型的互联网分层架构: 客户端层:典型调用方是browser或者APP 站点应用层:实现核心业务逻辑,从下游获取数据,对上游...

bjweimengshu
2017/11/28
0
0
Thirft框架介绍

1、前言 Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编...

nothingfinal
2014/05/20
0
0
ftp服务备忘录

NFS,SAMBA都是基于RPC的网络文件系统,用户可以挂载共享目录到本地来使用,与本地磁盘分区上的文件系统使用方式无区别。 FTP是不用RPC而基于C/S模式来运行的7层协议,提供文件传输服务。 一 ...

码上有春天
2016/09/03
22
0

没有更多内容

加载失败,请刷新页面

加载更多

使用递归打印乘法表

一般我们在学for循环的时候都会去打印九九乘法表,但是如果是用递归的方式打印的话,应该怎么做呢? 下面讲解一下用递归打印九九乘法表的思路: 其实我们在用for循环打印乘法表的时候,用的是...

INEVITABLE
18分钟前
5
0
sql 练习

创建需要的4张表 首先创建student、course、score、teacher这四张表。 student表 创建student表 CREATE TABLE IF NOT EXISTS student(sno TINYINT UNSIGNED NOT NULL,sname VARCHAR(20......

Garphy
19分钟前
7
0
vSphere的两种虚拟交换机

VMware vSphere 6.7中支持两种虚拟交换机: 1、标准交换机,VSS - Virtual Standard Switch 2、分布式交换机,VDS - Virtual Distributed Switch VSS与ESXi主机一一对应,即一个VSS只能部署在...

大别阿郎
21分钟前
5
0
webGL和three.js的关系

本文转载于:专业的前端网站➤webGL和three.js的关系 如今浏览器的功能越来越强大,而且这些功能可能通过JavaScript直接调用。你可以用HTML5标签轻松地添加音频和视频,而且可以在HTML5画布上...

前端老手
48分钟前
7
0
Spring如何实现AOP,请不要再说cglib了!

1. 从注解入手找到对应核心类 最近工作中我都是基于注解实现AOP功能,常用的开启AOP的注解是@EnableAspectJAutoProxy,我们就从它入手。 上面的动图的流程的步骤就是: @EnableAspectJAutoPr...

温安适
51分钟前
39
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部