XML Web Service 基础

XMLWebService基础
RogerWolter
MicrosoftCorporation
2001年12月

摘要:本文概述了XMLWebService对于开发人员的价值,同时还介绍了SOAP、WSDL和UDDI。

目录
什么是XMLWebService?
SOAP
WSDL
UDDI
其他内容
什么是XMLWebService?
XMLWebService是在Internet上进行分布式计算的基本构造块。开放的标准以及对用户和应用程序之间的通信和协作的关注产生了这样一种环境,在这种环境下,XMLWebService成为应用程序集成的平台。应用程序是通过使用多个不同来源的XMLWebService构造而成的,这些服务相互协同工作,而不管它们位于何处或者如何实现。

有多少个构建XMLWebService的公司,就可能有多少种XMLWebService定义。不过几乎所有定义都具有以下共同点:

XMLWebService通过标准的Web协议向Web用户提供有用的功能。多数情况下使用SOAP协议。
XMLWebService可以非常详细地说明其接口,这使用户能够创建客户端应用程序与它们进行通信。这种说明通常包含在称为Web服务说明语言(WSDL)文档的XML文档中。
XMLWebService已经过注册,以便潜在用户能够轻易地找到这些服务,这是通过通用发现、说明和集成(UDDI)来完成的。
本文将介绍这三种技术,但首先需要解释一下为什么要关注XMLWebService。

XMLWebService体系结构的主要优点之一是:允许在不同平台上、以不同语言编写的各种程序以基于标准的方式相互通信。对这一行业有所了解的用户可能马上会说:“等一等,CORBA和之前的DCE不是都做过相同的承诺吗?这和它们有什么区别?”最重要的区别在于:SOAP比以前的方法要简单得多,因此要实现与标准兼容的SOAP,障碍也要少得多。PaulKulchenko在http://www.soapware.org/directory/4/implementations(英文)上提供了一个SOAP实现方案的列表。上次统计时,该列表已经包含了79项。正如您所预料,多数大的软件公司都提供SOAP实现方案,但也有许多实现方案是由个别开发人员创建和维护的。相对以前的方案而言,XMLWebService的另一大优点是使用标准的Web协议-XML、HTTP和TCP/IP。许多公司都已经建立了Web基础结构,同时它们的员工在维护方面也都具备相应的知识和经验。因此,引入XMLWebService与引入以前的技术相比,其成本要低得多。

我们将XMLWebService定义为:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。那么,您也许要问:“使用XMLWebService能够做什么?”最初的XMLWebService通常是可以方便地并入应用程序的信息来源,如股票价格、天气预报、体育成绩等等。我们很容易想到,可以构建一整类应用程序以分析和汇总所关心的信息,并以各种方式提供这些信息;例如,您可以使用Microsoft®Excel电子表格来汇总所有的财务信息-股票、401K、银行存款、贷款等等。如果能够通过XMLWebService获得这些信息,Excel就可以不断对其进行更新。这些信息中有些是免费的,有些则可能需要订阅才能获得相应服务。大部分这种信息现在已经可以在Web上找到了,但是XMLWebService可以使编程访问更简单,也更可靠。

以XMLWebService方式提供现有应用程序,可以构建新的、更强大的应用程序,并利用XMLWebService作为构造块。例如,用户可以开发一个采购应用程序,以自动获取来自不同供应商的价格信息,从而使用户可以选择供应商,提交订单,然后跟踪货物的运输,直至收到货物。而供应商的应用程序除了在Web上提供服务外,还可以使用XMLWebService检查客户的信用、收取货款,并与货运公司办理货运手续。

将来,某些最有趣的XMLWebService所支持的应用程序还可以利用Web完成目前无法完成的任务。例如,日历服务就是Microsoft.NETMyServices(英文)项目即将支持的服务之一。如果您的牙医和机械师通过这一XMLWebService提供其日程安排,您就可以通过网络与他们安排约会;如果您愿意,他们也可以直接在您的日历上约定清洁和日常保养的日期。不难想象,只要能够对Web进行编程,您就可以创建数以百计的应用程序。

有关XMLWebService及其可以构建的应用程序的详细信息,请参阅MSDNWeb服务(英文)主页。

SOAP
Soap是XMLWebService的通信协议。当把SOAP描述为一种通信协议时,多数人都会想到DCOM或CORBA,并且会问“SOAP如何激活对象?”或“SOAP使用什么样的命名服务?”等问题。虽然SOAP实现方案可能会包含上述内容,但SOAP标准并未对其进行规定。SOAP一种规范,用来定义消息的XML格式-这是规范中所必需的部分。包含在一对SOAP元素中的、结构正确的XML段就是SOAP消息。这是不是很简单?

SOAP规范的其他部分介绍如何将程序数据表示为XML,以及如何使用SOAP进行远程过程调用(RPC)。这些可选的规范部分用于实现RPC形式的应用程序,其中客户端将发出一条SOAP消息(包含可调用函数,以及要传送到该函数的参数),然后服务器将返回包含函数执行结果的消息。目前,多数SOAP实现方案都支持RPC应用程序,这是因为习惯于开发COM或CORBA应用程序的编程人员熟悉RPC形式。SOAP还支持文档形式的应用程序,在这类应用程序中,SOAP消息只是XML文档的一个包装。文档形式的SOAP应用程序非常灵活,许多新的XMLWebService都利用这一特点来构建使用RPC难以实现的服务。

SOAP规范的最后一个可选部分定义了包含SOAP消息的HTTP消息的样式。此HTTP绑定非常重要,因为几乎所有当前的OS(以及许多以前的OS)都支持HTTP。HTTP绑定虽然是可选的,但几乎所有SOAP实现方案都支持HTTP绑定,因为它是SOAP的唯一标准协议。由于这一原因,人们通常误认为SOAP必须使用HTTP。其实,有些实现方案也支持MSMQ、MQ系列、SMTP或TCP/IP传输,但由于HTTP非常普遍,几乎所有当前的XMLWebService都使用它。由于HTTP是Web的核心协议,因此大多数组织的网络基础结构都支持HTTP,并且员工已经了解了如何对其进行管理。如今,已经建立了用于HTTP的安全保护、监视和负载平衡的基础结构。

开始使用SOAP时,最容易混淆的是SOAP规范及其许多实现方案之间的差异。多数使用SOAP的用户并不直接编写SOAP消息,而是使用SOAP工具包来创建和分析SOAP消息。这些工具包通常将函数调用从某种语言转换为SOAP消息。例如,MicrosoftSOAPToolkit2.0将COM函数调用转换为SOAP,而ApacheToolkit将JAVA函数调用转换为SOAP。函数调用的类型和支持的参数的数据类型随每个SOAP实现方案的不同而不同,因此适用于一个工具包的函数可能并不适用于另一个工具包。这并不是SOAP的限制,而是所使用的特定实现方案的限制。

到目前为止,SOAP最引人注目的特征是它可以在许多不同的软件和硬件平台上实现。这意味着SOAP可用于链接企业内部和外部的不同系统。过去曾试过多种方法以提出一个可用于系统集成的通用通信协议,但它们都没有象SOAP一样获得广泛的认可。为什么呢?因为与许多早期的协议相比,SOAP更小巧,而且更易于实现。例如,DCE和CORBA的实现需要数年时间,所以只发布了很少几个实现方案。而SOAP可以利用现有的XML分析器和HTTP库完成大部分艰苦的工作,因此SOAP实现方案在数月内便可完成。这就是为什么现在已经有70多个SOAP实现方案的原因。当然,SOAP并不具备DCE或CORBA的全部功能,虽然功能减少了,但由于其复杂程度大大降低了,因此SOAP更易于应用。

HTTP的普及和SOAP的简单性使您几乎可以从任何环境调用它们,因此成为XMLWebService的理想基础。有关SOAP的详细信息,请参阅MSDNSOAP(英文)主页。

安全性如何?
通常,刚接触SOAP的用户提出的第一个问题就是SOAP如何解决安全性问题。在其早期开发阶段,SOAP被看作是基于HTTP的协议,所以认为HTTP的安全性对于SOAP已经足够了。毕竟目前有数以千计的Web应用程序都在使用HTTP安全性,所以这对于SOAP确实已经足够。因此,当前的SOAP标准假定安全性属于传输问题,而并不作为安全性问题处理。

当SOAP扩展至更为通用的协议,并运行于众多传输之上时,安全性问题就变得突出了。例如,HTTP提供若干种方法对进行SOAP调用的用户进行身份验证,但是当消息从HTTP路由到SMTP传输时,怎样传播该身份标识呢?SOAP是作为构造块协议进行设计的,所以幸运的是,已经有了相应的规范以基于SOAP为Web服务提供额外的安全保护功能。WS-Security规范(英文)定义了一套完整的加密系统,而WS-License规范(英文)定义了相应的技术,以保证调用者的身份标识,并确保只有授权用户才可以使用Web服务。

WSDL
WSDL(WebServicesDescriptionLanguage)表示Web服务说明语言。在本文中,我们可以认为WSDL文件是一个XML文档,用于说明一组SOAP消息以及如何交换这些消息。换句话说,WSDL对于SOAP的作用就象IDL对于CORBA或COM的作用。由于WSDL是XML文档,因此很容易进行阅读和编辑;但大多数情况下,它由软件生成和使用。

要查看WSDL的值,可以假设您要调用由您的一位业务伙伴提供的SOAP方法。您可以要求对方提供一些SOAP消息示例,然后编写您的应用程序以生成并使用与示例类似的消息,但这样很容易出错。例如,您可能看到一个2837的客户ID,并假设它为整数,而实际上它是一个字符串。WSDL通过明确的表示法指定请求消息必须包含的内容以及响应消息的样式。

WSDL文件用于说明消息格式的表示法以XML架构标准为基础,这意味着它与编程语言无关,而且以标准为基础,因此适用于说明可从不同平台、以不同编程语言访问的XMLWebService接口。除说明消息内容外,WSDL还定义了服务的位置,以及使用什么通信协议与服务进行通信。也就是说,WSDL文件定义了编写使用XMLWebService的程序所需的全部内容。有几种工具可以读取WSDL文件,并生成与XMLWebService通信所需的代码。其中一些最强大的工具可在MicrosoftVisualStudio®.NET中找到。

当前,许多SOAP工具包都包括从现有程序接口生成WSDL文件的工具,但却几乎没有直接用于编写WSDL的工具,而且WSDL的工具支持也很不完整。但不久就会出现编写WSDL文件的工具,接着还会有生成代理和存根的工具(与COMIDL工具很相似),这些工具将成为多数SOAP实现方案的一部分。到那时,WSDL将成为创建XMLWebService的SOAP接口的首选方法。

这里有一个非常好的WSDL说明(英文),您还可以在http://www.w3.org/TR/wsdl(英文)找到WSDL规范。

UDDI
通用发现、说明和集成(UDDI)是Web服务的黄页。与传统黄页一样,您可以搜索提供所需服务的公司,阅读以了解所提供的服务,然后与某人联系以获得更多信息。当然,您也可以提供Web服务而不在UDDI中注册,就象在地下室开展业务,依靠的是口头吆喝;但是如果您希望拓展市场,则需要UDDI以便能被客户发现。

UDDI目录条目是介绍所提供的业务和服务的XML文件。UDDI目录条目包括三个部分。“白页”介绍提供服务的公司:名称、地址、联系方式等等;“黄页”包括基于标准分类法(例如NorthAmericanIndustryClassificationSystem和StandardIndustrialClassification)的行业类别;“绿页”详细介绍了访问服务的接口,以便用户能够编写应用程序以使用Web服务。服务的定义是通过一个称为类型模型(或tModel)的UDDI文档来完成的。多数情况下,tModel包含一个WSDL文件,用于说明访问XMLWebService的SOAP接口,但是tModel非常灵活,可以说明几乎所有类型的服务。

UDDI目录还包含若干种方法,可用于搜索构建您的应用程序所需的服务。例如,您可以搜索特定地理位置的服务提供商或者搜索特定的业务类型。之后,UDDI目录将提供信息、联系方式、链接和技术数据,以便您确定能满足需要的服务。

UDDI允许您查找提供所需的Web服务的公司。如果您已经知道要与谁进行业务合作,但尚不了解它还能提供哪些服务,这时该如何处理呢?WS-Inspection规范(英文)允许您浏览特定服务器上提供的XMLWebService的集合,从中查找所需的服务。

有关UDDI的详细信息,请访问http://www.uddi.org/about.html(英文)。

其他内容
到现在为止,我们已经讨论了如何与XMLWebService通信(SOAP),XMLWebService是怎样进行说明的(WSDL),以及如何查找XMLWebService(UDDI)。这些内容构成了一套基本规范,为应用程序的集成和聚合提供了基础。根据这些基本规范,公司可以构建实际的解决方案,并从中获益。

为实现XMLWebService,我们已经做了许多工作,但仍有大量工作需要完成。今天,人们已经使用XMLWebService取得了成功,但对于开发人员来说,仍有许多环节需要完善。例如,安全性、运营管理、事务处理以及可靠的消息传递等。GlobalXMLWebServicesArchitecture将通过以下方式帮助XMLWebService进入下一个发展阶段:提供一个一致的通用模型,以模块化和可扩展的方式向XMLWebService添加新的高级功能。

上面提到的安全模块(WS-Security[英文]和WS-License[英文])就是GlobalWebServicesArchitecture规范的一部分。运营管理的需要(例如在多个服务器之间路由消息,以及动态配置这些服务器以便进行处理)也是GlobalWebServicesArchitecture的一部分,它们是通过WS-Routing规范(英文)和WS-Referral规范(英文)来实现的。随着GlobalWebServicesArchitecture的发展,还将进一步介绍满足上述需要以及其他需要的规范。

详细信息,请参阅GlobalXMLWebServiceArchitecture(英文)。

你可能感兴趣的:(Web,xml,应用服务器,网络应用,SOAP)