原文:http://blog.csdn.net/liu_shi_jun/article/details/51121597
一、WebService的定义
WebService有好几种定义:
- W3C组织对其定义:WebService是一个软件系统,为了支持跨网络的机器间互操作交互而设计。
- WebService通常被定义为一组模块化的API,我们可以通过网络进行调用,来执行远程系统的请求服务。
- WebService就是暴露给外部使用的,可通过web调用的一组API。
- WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
- Web Service = XML+XSD,SOAP和WSDL
其实这多种定义只是从不同的角度,不同的高度来理解WebService,最终都殊途同归。
从表面上看,WebService是应用程序暴露给外部的一个能够通过Web调用的API,它告诉我们:这里有一组对象,它有哪些方法,方法名称是什么,所需要的参数是什么,参数类型如何,方法会给你返回什么值,可能会出现哪些异常,你怎么调用它,使用什么通信协议来传输数据等等这些信息。这样就可以通过编程的方法调用这个方法,获得这个WebService所提供的服务。这解释了2,3两种定义,这是WebService的外在表现形式。
从深层次来讲,WebService是构建分布式系统,实现可互操作的新的技术架构,是一个平台,是一套标准。它定义了如何在网络上实现互操作性,而不管你使用的是哪种语言,哪种操作系统。它最大的特点就是跨网络,跨平台。实现互操作性是它的目的,而互操作性就是指在网络间的不同机器之间进行相互操作,否则同一个网络,同一个机器之间需要什么互操作性吗。W3C的定义中,机器二字就暗示着不管是windows系统,还是苹果系统还是Linux系统,不管机器上是使用Java还是C,C#语言等,都可以实现互操作。这是WebService的内在价值,是一种更高,更深层次的系统架构。
WebService为了构建这样一个跨语言的,跨网络的分布式平台,它必须提供一套协议或者说标准。任何一个平台都有它自己的数据表示方法和数据类型系统。它必须提供一个统一的类型系统,以沟通不同语言,不同平台,不同组件模型的差异,使它们能够交流。它还必须提供一套标准来描述WebService,让客户能够得到足够且充分的信息来调用它。最后,它需要提供一种远程调用方法,告诉客户端以什么样的格式或者说方式来调用webService。这正好对应了WebService的三大技术:XML+XSD,WSDL,SOAP。
Web Service = XML+XSD,SOAP和WSDL这是从技术实现层面上来说明WebService
WebServices与WebService
初看,似乎一个是复数形式,一个是单数形式。然而,WebServices指的是用于架构WebService的整体技术框架,WebService表示使用WebServices技术框架而创建的应用实例。当然有时候WebServices也表示具体的应用实例,只不过这时是泛指(复数),有时候WebService也表示用于架构服务的整体技术框架。所以这两个词所表示的含义需要通过语境来确定,阅读文档时需注意。
二、WebService平台技术
XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。
XML+XSD
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。XML是WebService平台中表示数据的格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。
XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如.NET或Java,C语言)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换
SOAP:
WebService通过HTTP协议发送请求和接收结果时,必须要有一定的格式,并不是说通过Http随便发送一个请求就可以的。发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议定义了SOAP消息的格式,SOAP协议是基于HTTP协议的,SOAP也是基于XML和XSD的,XML是SOAP的数据编码方式。Http是基本协议,而SOAP在基础协议上添加了一系列的格式限制。打个比喻:HTTP就是普通公路,XML就是中间的绿色隔离带和两边的防护栏,SOAP就是普通公路经过加隔离带和防护栏改造过的高速公路。
WSDL:
WebService客户端要调用一个WebService服务,首先要先知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。WSDL是WebService的描述。就好比你买了一辆散装自行车,总得附一个产品说明书吧,告诉你怎么把自行车怎么组装起来,各个零件的作用.
WSDL(Web Services Description Language)就是这样一个基于XML的语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。
WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
三、WebServices体系架构模型
WebService体系结构基于三种角色(服务提供者,服务注册中心,服务请求者)之间的交互。交互具体涉及到发布、查找和绑定操作。服务提供者提供WebService描述并且将服务发布到服务请求者或者服务注册中心。服务请求者使用查找操作从本地或者服务注册中心搜索服务描述,然后使用服务描述与服务提供者绑定,并调用相应的WebService实现、同它交互。服务注册中心是一个Web服务的注册地,汇集了很多在线的Web服务一般来说服务提供者将Web服务安装到在线服务器之后,会将Web服务发布到服务注册中心去,从而使得服务注册中心包含了越来越多的Web服务的技术信息。目前,服务注册中心即为UDDI商业注册中心。服务提供这和服务请求者角色是逻辑结构,下图展示了这三者之间的关系和交互。
- 服务提供者(Service Provider)
从企业的角度来看,这是服务的所有者。从体系结构的角度看,这是托管被访问服务的平台。 - 服务请求者(Service Requestor)
从企业的角度来看,这是要求满足特定要求的企业。从体系结构的角度来看,这是寻找并调用服务、或启动与服务交互的应用程序。服务请求者角色可以由浏览器来担当,有人或这无界面的应用程序(例如:另一个WebService)来控制它。 - 服务注册中心(Service Registry)
这是可搜索的服务描述注册中心。服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行阶段,服务请求者在这里查找服务并获取服务的绑定信息(在服务描述中)。对于静态绑定的服务请求者,服务注册中心是可选的,因为服务提供者可以把服务描述直接发送给服务请求者。同样服务请求者也可以从服务注册中心以外的其他来源中获得服务描述。例如:本地文件,FTP站点,Web站点、ADS文本文件(Advertisement and Discovery of Services)或者DISCO文件(Discovery of WebServices)。
四、WebServices协议栈
前面说道,WebService为了构建一个跨语言的,跨网络的分布式平台,也为了保证在基本访问之上的事务、工作流、安全机制等。它必须提供一套协议或者说标准。下图展示了一个概念性的WebServices协议栈。上层建立在下层协议提供的功能之上。
网络传输层
WebService协议栈的基础是网络传输层。WebService要想被服务请求者调用,就必须是可以通过网络进行访问的。Internet上可以访问的WebService采用已经普遍部署的网络协议:HTTP。当然在一些特殊应用上,WebService也支持FTP协议(文件传输),和SMTP协议(电子邮件)。而对于Intranet上,WebServices也支持采用中间件来作为传输交互的基础架构,例如IBM的MQ Series(已改名为MQ)和CORBA(Common Object Request Broker Architecture)
WebService的优势之一就是能够为Internet和Intranet上的服务开发和使用提供统一的编程模型。因此对于开发者来说,网络协议和技术的选择是透明的。
数据表现层
数据表现层的XML为WebServices上层协议提供了信息、数据描述手段。XML是目前全球范围内描述数据和交换数据的一种标准方式。
在WebServices的时代,全部的规范、技术都是以XML为底层核心和构架基础的。对WebServices而言,不管是WebService的调用(SOAP技术),还是WebService的界面描述(WSDL技术),还是WebService的发现(UDDI技术)都是将XML作为信息描述和交换的标准方式。
数据模型层
在数据表现层之上是数据模型层。描述数据结构的数据模型(也就是元数据),它本身也是一种数据。因此,描述数据结构的方式也是使用WebServices标准的数据表现方式:XML。
XML Schema是XML世界中标准的数据建模语言,SOAP、WSDL、UDDI的语法都是通过XML Schema来定义和描述的。XML Schema已经成为XML世界中的标准交流工具,类似于软件设计中的UML。
基于XML的消息层
在这一层此,WebServices使用的是基于XML的消息交换协议SOAP。SOAP是构建于更低的传输层之上,这意味这SOAP可以单独使用,也可以与任何传输层协议进联合使用。所有的SOAP消息都提供前面说过的WebService架构中的发布(Publish)、绑定(Bind)、和查找(Find)功能。SOAP由三个部分组成:
- 一个使用XML信封来描述消息内容的机制
- 一组编序规则,用来编码各种各样的数据格式
- 一个提供远程过程调用(RPC)和响应的机制
服务描述层
服务描述为调用WebService提供了具体的方法。它是基于XML格式的用于定义和描述WebService服务的实现和接口的基础标准。这也表示WSDL将服务描述为两个部分:服务实现和服务接口。在按照WSDL进行服务实现之前,我们必须先定义服务接口。WSDL只是服务的基本描述手段,要指定业务环境、服务质量和服务之间的关系,我们还需要另外的描述手段。
服务发布层
WSDL文档只是服务的基本描述手段,它可以通过其他服务描述文档来补充,以描述WebServices例如业务环境,服务质量等更高级的信息。
在服务客户生命周期内的任一阶段,都可以将WSDL文档发送给WebService的客户端。当这一操作被涉及后,我们就需要从服务描述层进入到下一个服务层次的服务发布层。在这一层次,服务提供者能够向服务客户端发送WSDL文档,一个可能的例子是通过Email的形式。同时,服务提供者也可以将WSDL发布到本地的UDDI库中,或者是公共/私有的UDDI服务注册中心,服务客户端可以通过注册库发现WSDL文档。
服务发现层
服务发现层基于服务发布层。如果服务没有发布或者不能发布,它就不能被发现。服务客户端也可以选择在设计阶段或运行时阶段通过本地WSDL服务注册中心或者公有/私有的UDDI注册中心发现WSDL文档。
服务工作流层
WebServices工作流语言(WSFL)是协议栈顶层的服务工作流层的标准语言。与协议栈中其他的标准不同,WSFL针对的是商务流程建模和工作流。WSFL用于描述WebService在工作流中如何交互,以及服务跟服务之间的通信和协同,这意味这WebService可以是工作流的一部分,也可以动态地被编入工作流。特别是,这个工作流有可能发生在买方,卖方和承运方之间。
例如WSFL允许工作流管理器从一个复合WebServices中,按工作流来定义依据商业流程赋予的不同功能的,作为其成分的每个个体WebService。这样的商业流程包括财务报表、预测和5年IT计划等。