文档章节

Web Service研究分析

陶邦仁
 陶邦仁
发布于 2012/08/14 10:38
字数 3581
阅读 1035
收藏 18

1         Web Service

1.1     Web Service 介绍

Web服务是一种面向服务的架构技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。

Web Service 是为其它应用提供数据和服务的应用逻辑单元,应用程序通过标准的Web 协议和数据格式获得Web Service,如HTTP XML SOAP 等,每个Web Service 的实现是完全独立的。

简单地讲,Web 服务是一个URL 资源,客户端可以通过编程方式请求得到它的服务,而不需要知道所请求的服务是怎样实现的,这一点与传统的分布式组件对象模型不同。

 

例如:很多大的站点提供有天气预报的webservice、查询某网站的数据的webservice,只要你发送请求过来,它就返回天气预报、某网站的数据,然后你把结果显示处来。

 

 

Ø  核心定义:

考虑到并没某个独立文档包含一切相关内容,可采用模块化的方式给出对WEB服务的描述,但不能给出一个“绝对全面和准确”的定义。受外部环境和实现技术影响,各方给出的核心定义可能稍有出入,但通常包括:

命名空间:其主要目的通过加一个命名属性,使名称保持唯一性。WSDL有大量的使用

命名空间的地方。本质上WSDL是一个XML文件,作为一个XML文件,为了区别同名的元素,就需要采用命名空间的概念。

SOAP:简单对象访问协议,一个基于XML的可扩展消息信封格式,需同时绑定一个传输用协议。这个协议通常是HTTPHTTPS,但也可能是SMTPXMPP,用于网络上,不同平台,不同语言的应用程序间的通讯。可自定义,易于扩展。

WSDL:一个XML格式文档,用以描述服务端口访问方式和使用协议的细节。通常用来辅助生成服务器和客户端代码及配置信息。

UDDI:一个用来发布和搜索WEB服务的协议,应用程序可藉由此协议在设计或运行时找到目标WEB服务。

 

Ø  协议集:

WS安全(WS-Security):定义了如何在SOAP中使用XML加密或XML签名来保护消息传递。可作为HTTPS保护的一种替代或扩充。

WS信赖性(WS-Reliability):一个来自OASIS的标准协议,用来提供可信赖的WEB服务间消息传递。

WS可信赖消息(WS-ReliableMessaging):同样是一个提供信赖消息的协议,由Microsoft, BEA IBM发布。目前OASIS正对其实施标准化工作。

WS寻址(WS-Addressing):定义了在SOAP消息内描述发送/接收方地址的方式。

WS事务(WS-Transaction):定义事务处理方式。

 

Web Service = SOAP + HTTP + WSDL。其中,SOAP Simple Object Access Protocol)协议是web service的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的计算服务处理。这里的WSDLWeb Services Description Languageweb 服务描述语言也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。

1.2     Web Service 方式

远程过程调用(RPC):WEB服务提供一个分布式函数方法接口供用户调用,这是一种比较传统的方式。通常,在WSDL中对RPC接口进行定义(类似于早期的XML-RPC)。

尽管最初的WEB服务广泛采用RPC方式部署,但针对其过于紧密之耦合性的批评声也随之不断。这是因为RPCWEB服务实质上是利用一个简单的映射,以把用户请求直接转化成为一个特定语言编写的函数或方法。如今,多数服务提供商认定此种方式在未来将难有作为,在他们的推动下,WS-I基本协议集(WS-I Basic Profile)已不再支持远程过程调用。

 

面向服务架构(SOA):现在,业界比较关注的是遵从面向服务架构(Service-oriented architectureSOA)概念来构筑WEB服务。在面向服务架构中,通讯由消息驱动,而不再是某个动作(方法调用)。这种WEB服务也被称作面向消息的服务。SOAWEB服务得到了大部分主要软件供应商以及业界专家的支持和肯定。作为与RPC方式的最大差别,SOA方式更加关注如何去连接服务而不是去特定某个实现的细节。WSDL定义了联络服务的必要内容。

 

表述性状态转移(REST):表述性状态转移式(Representational state transferRESTWEB服务类似于HTTP或其他类似协议,它们把接口限定在一组广为人知的标准动作中(比如HTTPGETPUTDELETE)以供调用。此类WEB服务关注与那些稳定的资源的互动,而不是消息或动作。此种服务可以通过WSDL来描述SOAP消息内容,通过HTTP限定动作接口;或者完全在SOAP中对动作进行抽象。

 

1.3     Web Service 优势

Ø  可操作的的分布式应用程序;

Ø  普遍性、使用HTTPXML进行通信;

Ø  Web Service 甚至可以穿越防火墙,真正的自由通信;

Ø  通过 SOAP 协议实现异地调用;

Ø  Service 组件易复用,易集成;

2         Web Service 运行原理

Web 服务有两层含义:1、是指封装成单个实体并发布到网络上的功能集合体;2、是指功能集合体被调用后所提供的服务。

 

Web 服务的体系结构是基于Web 服务提供者、Web 服务请求者、Web 服务中介者三个角色和发布、发现、绑定三个动作构建的。简单地说,Web 服务提供者就是Web 服务的拥有者,它耐心等待为其他服务和用户提供自己已有的功能;Web 服务请求者就是Web 服务功能的使用者,它利用SOAP 消息向Web 服务提供者发送请求以获得服务;Web 服务中介者的作用是把一个Web 服务请求者与合适的Web 服务提供者联系在一起,它充当管理者的角色,一般是UDDI 。这三个角色是根据逻辑关系划分的,在实际应用中,角色之间很可能有交叉:一个Web 服务既可以是Web 服务提供者,也可以是Web 服务请求者,或者二者兼而有之。显示了Web 服务角色之间的关系: 其中,发布是为了让用户或其他服务知道某个Web 服务的存在和相关信息; “查找(发现)是为了找到合适的Web 服务; “绑定则是在提供者与请求者之间建立某种联系。

 

3         Web Service 实现机制

Web 服务提供者设计实现Web 服务,并将调试正确后的Web 服务通过Web 服务中介者发布,并在UDDI 注册中心注册 (发布)

 

Web 服务请求者向Web 服务中介者请求特定的服务,中介者根据请求查询 UDDI 注册中心,为请求者寻找满足请求的服务; (发现)

 

Web 服务中介者向Web 服务请求者返回满足条件的Web 服务描述信息,该描述信息用WSDL 写成,各种支持Web 服务的机器都能阅读;(发现)

 

利用从Web 服务中介者返回的描述信息生成相应的SOAP 消息,发送给Web 服务提供者,以实现Web 服务的调用;(绑定)

 

Web 服务提供者按SOAP 消息执行相应的Web 服务,并将服务结果返回给Web 服务请求者。(绑定)

4         Web Service 开源框架

4.1     JWS

JWSJava语言对WebService服务的一种实现,用来开发和发布服务。而从服务本身的角度来看JWS服务是没有语言界限的。只是Java语言为Java开发者提供便捷发布和调用WebService服务的一种途径。

详情见URL

Ø  JWS开发WebService

http://www.iteye.com/topic/166314

4.2     Axis2

Axis2Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。

 

详情见URL

Ø  Axis2系列教程:

 

http://www.blogjava.net/nokiaguy/archive/2009/01/02/249556.html

http://www.cnblogs.com/mingzi/archive/2009/03/09/1406839.html

4.3     XFire

XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了ApacheAxis2XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。

 

详情见URL

Ø  XFire 开发WebService

http://www.doc88.com/p-59359114924.html

Ø  XFire集成Spring开发WebService

http://txswjhd.blog.163.com/blog/static/42232682200781825429353/

 

 

4.4     CXF

CXFApache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)CXF来自于XFire项目,经过改造后形成的,就像目前的Struts2来自WebWork一样。可以看出XFire的命运会和WebWork的命运一样,最终会淡出人们的视线。CXF不但是一个优秀的Web Services / SOAP / WSDL 引擎,也是一个不错的ESB总线,为SOA的实施提供了一种选择方案,当然他不是最好的,它仅仅实现了SOA架构的一部分。

 

详情见URL

Ø  CXF 开发WebService

http://hi.baidu.com/cpuhandou/blog/item/597dde17546ed915972b4317.html

Ø  CXF 集成Spring 开发WebService

http://tonyaction.blog.51cto.com/227462/202754

http://www.ibm.com/developerworks/cn/webservices/ws-pojo-springcxf/

4.5     Spring WS

Spring web services(以下简称:Spring WS)框架是基于契约先行(contract first),Springframework东家SpringSource公司旗下的一个子项目。

 

Spring Web Services框架的特点:

Ø  Spring框架的支持,你可以重用Spring的所有特性。

Ø  Spring WS使用Contract First(自顶向下)的设计方式。Spring WS不支持Contract Last(自底向上)

Ø  支持几乎所有的XML API,处理传入XML消息的时候就不限于JAX-P,可以是任意的XML API,选择你所擅长的。

Ø  灵活的XML Marshalling,Object/XML mapping产品的支持,包括JAX-B1,2XMLBean以及Castor等等。

Ø  Security支持,集成了Acegi.实现web services 认证。

 

详情见URL

Ø  Spring Web Service 开发:

http://www.iteye.com/topic/152556

http://arronzhen.iteye.com/blog/794482

http://www.blogjava.net/liuzheng/articles/170363.html

 

5         Web Service     总结

Web Service SOAP尽管是一种标准的传输协议,但是它毕竟是一种特殊的协议,一种特殊的技术,并不支持其它的传输协议,如RMI等,所以Web Service 还是和特定的SOAP技术绑定在一起的。 通过了解IT和程序语言的发展历史,可以得到这样的一个结果,SOA是为了信息集成,而出现的一种新事物,它显然是超越的现有的一切技术,但是它又包含了所有的技术。SOA达到的一个目的就是面向服务,而这种面向服务的结果就是忽略任何与技术有关的东西,最终提供的都是服务接口。

 

其实我们还应该搞清楚面向对象和面向组件之间的区别,面向组件和面向服务的区别,SOAweb service之间的区别?
   

面向服务和面向组件的区别在于面向组件需要和传输协议及应用服务器的端口绑定,面向服务就是要进一步对面向组件解耦,所谓解耦就是将业务组件和传输协议的端口解耦,既各种业务组件可以自由的绑定各种传输协议。 SOAweb service之间的区别是SOA是在web Service的基础上发展起来的,web service实现了松散耦合的服务和粗粒度的服务,但是web service本质上只是一个服务组件,它虽然采用的标准的协议,但是它是与应用服务器紧密相关的。
   

所以可以得出结论:SOA本身并非什么具体的技术,也不是什么架构,它是一种思想,它超越了现有的技术和架构,但是它又包含了现有技术和架构。运用这种思想要到达的目的就是做到业务和技术的完全分离,做到敏捷的、不受限制的信息集成。

 

对于SOA,可举以下例子:

 

有人说英语,有人说汉语,还有人说法语...Web Service说,这不利于集成..大家都来说"世界语"—SOAPSOA说,世界语还是语言,和特定表达方式绑定了;我们最终要做到,大家都使用脑电波交流,最终要做到语言和表达完全分离,做到敏捷的、不受限制的信息集成。

 

6         Web Service     术语

SOAP --    Simple Object Access  Protocol

 

WSDL --   Web Service Description Language

 

UDDI  --    Universal Description Discovery &Integration

 

JAXP  --      THE Java API for XML Processing

 

SAX  --       Simple API for XML Parsing

 

DOM  --      Document Object Model

 

SAX  --       The Simple API for XML

 

XSLT   --     THE XML Stylesheet Language for Transformations

 

JAXB  --       THE Java Architecture for XML Binding

 

JAX-RPC  -- Java API for XML-base RPC

 

RPC   --       Romote Procedure Calls

 

JAXR   --      THE Java API for XML Registries

 

Java WSDP  -- Java Web Services Developer Pack

 

JAX-WS   --     Stands for Java API for XML Web Services

© 著作权归作者所有

共有 人打赏支持
陶邦仁
粉丝 1588
博文 420
码字总数 1483822
作品 0
海淀
技术主管
加载中

评论(2)

y
yuzc2015
楼主是大神啊,什么都会,佩服!79
JavaOlder
JavaOlder
不错。学习了。感谢楼主的分享!
聊聊服务架构_Index

聊聊服务架构 Web Service研究分析 深入浅出SOA思想 微服务、SOA 和 API对比与分析

陶邦仁
2016/05/19
1K
0
服务器后端开发系列——《实战Nginx高性能Web服务器》

1、高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例 内容:概述Nginx的背景知识和简单的入门实例。 2、高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“...

晨曦之光
2012/04/24
162
0
2020年全球云计算市场将达2410亿美元

一份对全球云计算市场未来的详细分析报告预计,到2020年该类市场的价值将从如今的400亿美元上升至2410亿美元。市场研究公司Forrester的研究显示,随着云计算业务市场的成长,SaaS(software ...

老枪
2011/04/23
504
1
关注移动Web应用性能问题(上)

移动平台逐渐成为客户端应用的主流载体之一,为了消除应用在不同移动平台的兼容性,采用Web形式开发移动应用成为潮流(当然特别依赖于原生功能和 性能的应用,如游戏可能例外)。随着Web移动...

墙头草
2011/04/02
0
0
mobile web 前端研发流程 【转载】

接触Mobile WEB前端开发将近一年时间了,在这不算短的时间里,通过吸取圆心、沉鱼等前辈们的经验以及不断的摸索和实战,总结出一套自己的Mobile WEB“研发流程”。为什么叫“研发”流程而不是...

石秋风
2012/04/18
0
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

[MicroPython]STM32F407开发板驱动OLED液晶屏

1.实验目的 1.学习在PC机系统中扩展简单I/O 接口的方法。 2.进一步学习编制数据输出程序的设计方法。 3.学习 F407 Micropython开发板控制OLED显示字符。 2.所需元器件 F407 Micropython开发板...

bodasisiter
18分钟前
0
0
php require和include 相对路径一个有趣的坑

以前总是被教育,不要使用相对路径,这样性能比较差,但是相对路径的问题不仅仅是性能哦,看下面这里例子 这是项目结构 .├── main.php├── t│ ├── t1.php│ └── t2.php└─...

anoty
19分钟前
9
0
x64技术之SSDT_Hook

测试环境: 虚拟机: Windows 7 64bit 过PG工具 驱动加载工具 PCHunter64 系统自带的计算器和任务管理器等 实现思路: 实际思路与win32的思路一样.都是替换SSDT表里边的函数地址.不过微软被搞怕...

simpower
20分钟前
0
0
TreeMap源码分析,看了都说好

一、简介 TreeMap最早出现在JDK 1.2中,是 Java 集合框架中比较重要一个的实现。TreeMap 底层基于红黑树实现,可保证在log(n)时间复杂度内完成 containsKey、get、put 和 remove 操作,效率很...

Java小铺
30分钟前
0
0
协变、逆变

概念 假设 A、B表示类型 ≤ 表示继承关系 f<⋅>表示类型转换 若A ≤ B,则 A是B的子类,B是A的超类 协变、逆变 什么是型变?型变(type variance)允许对类型进行子类型转换。 为了下面讲解先...

obaniu
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部