1第十讲Web服务技术标准与规范所谓Web服务(WebServices)是指由企业发布的完成其特别商务需求的在线应用服务,其它公司或应用软件能够通过Internet来访问并使用这项在线服务。Web服务技术促进了Internet上企业之间的协作,使用Web服务可以使合作伙伴的信息系统之间更容易地进行通信。但随之而来的问题是:如何集成来自不同企业的服务?为了使Web服务易于使用,众多组织已经致力于Web服务技术,进行标准协议的制定,提供Web服务的创建工具和解决方案。本讲将以Web服务栈为中心介绍Web服务技术涉及的一些关键标准和规范,如SOAP、WSDL、UDDI等。Web服务标准本身是不断发展变化的,文中着重介绍目前被普遍接受的底层标准,并对还需要进行标准化的领域进行简单的讨论。1.Web服务Web服务是可以在组织内部或者公司之间的异构计算资源中被共享、组合、使用和复用的商业资产。Web服务是一个可编程的部件,它提供一种易于通过Internet获取的商业服务。Web服务可以是独立的,也可以连接在一起向外部世界提供更强大的系统功能。Web服务将逐渐成为构建电子商务应用的基础体系结构。基于Web服务的体系结构是从一个分布式面向对象部件的系统向一个服务网络的逻辑演进,该服务网络提供一个能够跨企业集成的松散耦合的底层基础结构。Web服务是基于Internet的模块化应用,它们执行特定的商业任务并遵循特定的技术格式。如果应用中的某过程可以在Internet上以一种标准格式被调用,称之为Web服务的服务器;类似的,如果通过Internet调用本应用以外的某过程,则是Web服务的客户。因此,实质上Web服务是Internet上应用之间的客户服务器,目的是实现B2B伙伴之间的个性化信息交换,并以一种易用的格式提供和发布应用模块。为了实现这种开放工作,必须要有标准的格式和方法。几乎所有的主流技术公司都已相继涉足Web服务的标准化工作,参与了各种标准化组织。当前,最主要的标准化组织是W3C(WorldWideWebConsortium)。其它组织也做了大量的工作,如UDDI.org,OASIS,UN/CEFACT,BPMI.org,以及ebXML.org等。Web服务栈(WebServicesStack)Web服务不同于已有的构件对象模型以及相关的对象模型协议,如CORBA和IIOP(InternetInter-ORBProtocol)、COM和DCOM以及Java和RMI(RemoteMethodInvocation)。Web服务可以用任何语言编写,并且可以使用HTTP访问。从技术上看,一个Web服务是一个由内容、应用代码、过程逻辑、或者这些部分的任意组合所构成的XML对象,并且可以通过任何TCP/IP网络访问,只要网络中使用SOAP标准集成,使用WSDL标准进行自描述,使用UDDI标准在一个公共的或者私有的目录中注册和发现。如图1所示,Web服务由多个层构成,这些层堆叠在一起形成了发现和调用一个独立的Web服务所提供功能的标准机制的基础。即,Web服务栈以层次结构来表示,高层在低层的基础之上构建。2图中HTTP提供了分布式应用之间的通信机制,XML定义了数据交换和描述的格式,SOAP是调用Web服务的协议,WSDL描述Web服务的格式,而UDDI则是注册、查找和使用Web服务的中枢组织。下面分别介绍这些协议及相关的规范。2.HTTPWeb服务栈中的最底层是网络层,也可以称为协议层。分布式的应用需要有网络协议来定义两个并发过程之间的通信机制。概念上,Web服务的设计是与协议无关的,在图1的分层体系结构模型中,从底向上任何标准的Internet协议都可以用于在网络上调用Web服务。但目前主要是HTTP(HypertextTransportProtocol)和HTTPS(HypertextTransportProtocolSecure)协议。HTTP/1.1是一个基于文本的、“请求-响应”(request-response)型的协议,它规定一个客户打开到服务器的一个连接,然后以专门的格式发送一个请求,服务器进行响应,同时如果必要则保持连接的打开状态。HTTP使用的普遍性及其固有的穿防火墙的能力使它成为主导的Web服务网络协议。但同时由于HTTP是基于文本的协议而缺乏表示远程过程调用(RPC)消息参数值的机制。其它的请求/响应类型的传输协议,如文件传输协议(FileTransferProtocol,FTP)和简单邮件协议(SimpleMailTransportProtocol,SMTP)也可以使用,但是并没有在Web服务的各种标准中定义,目前也只有极少数实现支持这些协议。另外,最近IBM发布了一个可靠通信协议的提案,称作HTTPR。HTTPR在HTTP的基础上加强了可靠性,在保持HTTP优点的同时能够保证消息可以不受阻碍地发送到目的地。可靠的通信对Web服务来说是一个非常关键的方面,虽然目前对由协议层实现是否最适合仍然有争议,但在不远的将来它肯定会以某种形式出现。3.XML(ExtensibleMarkupLanguage,可扩展标记语言)基于XML的消息层包括数据表示、数据格式和消息传输协议。XML为信息交换定义了描述和格式。数据表示HTTP是一种基于文本的协议,因而缺乏表示RPC消息中的参数值的机制,这也是XML作为Web服务的一个重要成分出现的原因。XML是一种元语言,可以通过标准的编码和UDDIWeb服务&WSDLHTTP/HTTPS,SMTP,FTPSOAP/XML服务发现层服务描述层基于XML的消息层网络层图1Web服务栈3格式化信息的方法进行跨平台的数据交换。XML允许数据被串行化为易于被任何平台解码的消息格式,提供了在网络应用之间交换结构化数据的机制。XML采用纯文本表示,设计的初衷是为了存储、传送和交换数据的。XML是一种标记语言,标记在XML中不是预先确定的,而必须由使用者自己定义。XML允许使用者自由发表有用的信息,不仅可以是有关数据结构的,也可以是关于数据意义的。另外,XML文档的结构、内容和外观可以作为三个不同的部分进行维护,提供了更高的独立性。对于数据表示层来说,可扩展性是一个关键因素。为了支持可扩展性,Web服务需要一种机制以避免名字冲突,并允许一个程序只处理自己所关心的元素。XML名空间(namespaces)提供了一种简单、通用的方式以区分相同名字的元素或属性。为了支持可扩展性,XML中的每个元素和属性都有一个相关的名空间URI。数据格式Web服务需要一种方法定义Web服务消息中使用的数据类型。XMLSchema规范标准化了一个描述XML数据类型的符号集,还定义了一个内置简单数据类型的集合和在各XML文档中建立元素类型的机制。XMLSchema规定了XML文档的逻辑结构,定义了元素、元素属性以及元素和元素属性之间的关系。XML仍然处于不断的发展中。需要说明的是,XML本身只是一种标记语言,只是进行描述,并不提供商务逻辑,Web服务提供对这些逻辑的访问。这也是为什么Web服务的更高层的、基于XML概念同样非常重要的原因。4.SOAP(SimpleObjectAccessProtocol,简单对象访问协议)SOAP是目前被广泛接受的消息传输协议。SOAP是一个为信息交换设计的轻量协议,用于在网络应用程序之间交换结构化数据,是一种基于XML的机制。SOAP主要是在分布的、分散的环境中提供了一个跨Internet调用服务的框架结构,并提供了独立于编程语言和分布对象底层基础结构的跨平台集成机制。SOAP代表了xml-rpc的发展,已经被W3C作为一种Internet标准采纳。SOAP是一个远程过程调用(RPC)协议,使用标准的Internet协议进行传输:同步调用时的HTTP或异步调用时的SMTP。由于可以在HTTP上运行,这使得SOAP在穿防火墙进行操作的方面优于DCOM、RMI和IIOP,而在嵌入设备上实现SOAP也比开发一个ORB更简单。SOAP的主要设计目标是简单性和可扩充性。为了到达这两个目标,SOAP中省略了在其它消息系统和分布式对象系统中常见的一些特性,如无用存储单元收集、消息批处理等。SOAP没有定义一种编程模型或实现,而是定义了一个模块化的包装模型,并在模块内定义了编码数据的编码机制。这使得SOAP可以在从消息传递系统到远程过程调用的任何系统中应用。SOAP的组成SOAP由四个部分组成:(1)一个SOAP封皮(Envelope),定义了描述消息所包含信息的框架结构,即消息中包含什么信息、由谁来处理以及是必需的或可选的。(2)一组SOAP编码规则(Encodingrules),定义了一个串行化机制,用于交换应用定义的数据类型的实例。SOAP编码的类型使用简单的标量类型和复合类型,如结构和数组。这些类型以XML文档元素的形式表现,XMLSchema规范中定义的数据类型以及这些数据类型的派生类型都可以直接用作SOAP元素。4(3)SOAPRPC表示,定义如何表示远程过程调用和响应。SOAP的设计目标之一是用XML的可扩展性和灵活性封装RPC功能,在SOAP1.2中详细定义了RPC和响应的统一表示,将对一个方法的调用和响应作为结构来建模,结构中包含了返回值,或者还可能包括传入的参数。(4)SOAP绑定(binding),定义如何使用底层传输协议进行SOAP消息的交换。虽然SOAP本身可以和多种协议结合使用,但SOAP1.2中只描述了在HTTP中的使用。SOAP和HTTP绑定可以同时使用SOAP的形式方法与分散的灵活性以及HTTP丰富的特性集。在HTTP中使用SOAP并不意味着SOAP覆盖了HTTP现有的语义,而是SOAP继承了HTTP的语义。SOAP消息SOAP消息是用XML编码的文档,由三个部分组成:(1)SOAP封皮(SOAPEnvelope),是描述SOAP消息的XML文档的顶点元素。(2)SOAP消息头(SOAPHeader),提供了一种灵活的机制对SOAP消息以分散的、模块化的方式进行扩充,而通信的各方(SOAP发送者,SOAP接收者以及SOAP中介)不必预先知道。SOAP消息头是可选的。(3)SOAP消息体(SOAPBody),定义了一个简单的机制来交换要发送给最终SOAP接收者的消息中的必要信息,是这些信息的容器。典型的使用是编组RPC调用和SOAP错误报告。SOAP消息交换模型SOAP消息是单方向的,从一个SOAP发送者(sender)到一个SOAP接收者(receiver)。但单独的消息通常可以被组合在一起形成其它消息机制。例如,SOAP通过在HTTP请求中提供一个SOAP请求消息和在HTTP响应中提供一个SOAP响应消息实现HTTP的请求/响应消息模型。SOAP消息交换模型要求接收到一个SOAP消息的应用程序执行下列操作:(1)识别SOAP消息中意图供给本应用的部分,本应用可以作为SOAP中介将消息的其它部分传递给另外的应用。(2)检验SOAP消息中指定的所有必须处理的部分,并进行相应的处理。(3)如果SOAP应用不是消息的最终目的地,它应该在删除所有自己消耗的部分后将消息转发给消息要供给的下一个应用。SOAP只是一种包装和绑定调用一个Web服务所需信息的方式,Web服务也可以使用其它的编码技术调用。另外,SOAP本身没有严格地归入Web服务,SOAP可以作为一种对任何类型的远程对象或过程的访问机制使用,也可以只是一个简单的消息传递机制。除了SOAP以外,W3C创建的XMLP工作组还建立了XML协议(ExtensibleMarkupLanguageProtocol,XMLP)。XMLP是类似于SOAP的XML消息协议,包括封皮、对象串行化方式、HTTP传输绑定以及进行远程过程调用的方式几个部分。甚至有人认为XMLP将逐步取代SOAP。5.WSDL(WebServicesDescriptionLanguage,Web服务描述语言)Web服务的目标之一是允许应用程序以标