WSDL就是描述
XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种
对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。
用WSDL说明服务
作为一种基于XML的标准,如果你对XML具有一定的了解,那么WSDL的结构对你就不会陌生了。WSDL文档由服务用来描述数据类型的一组元素、服务可以收到的“消息”以及关联每条消息的SOAP绑定组成。
清单A就是一份简单的WSDL文档,该文档同W3C网站公布的WSDL示范文本是一样的,它说明了一种股票行情服务(这也是相当标准的一种Web服务)。
再仔细阅读清单A,你可以看到,文档首先以标准的XML头开头,其中包含了一个版本标识,而文档的根元素则被称为definitions。
Definitions元素可以采用若干种可选属性,这些属性说明文档同时定义文档其余部分使用的名称空间(namespace)。在这种情况下,定义被分配了一个名字(StockQuote),某些名称空间定义是根据以下常规前缀缩写制定的:
tns—“this namespace”的缩写,包含被定义服务的主名称空间
xsdl—XML Schema (XSD)名称空间,用于定义文档中的类型
soap—SOAP绑定采用的名称空间
接下来,为了定义服务的接口需要在type元素内定义所需要的任何复杂类型。这里你必须注意使用标准的XSD句法(属性),它是创造数据类型定义最为适合的
方法。不过,如果你愿意,WSDL也能扩展使用不同的类型定义系统。
消息概述
按WSDL的用法,消息可以是传递给某一服务公布对象上的方法的任何参数或者方法被调用之后的任何返回结果。为了继续使用股票行情这个Web服务例子,单一定义方法多半如以下伪
代码所示:
floatgetLastTradePrice(string tickerSymbol)
这样,就像你从清单A所看到的那样,文档中定义了两条消息,一条代表方法的输入参数tickerSymbol(GetLastTradePriceInput消息)另一条代表该方法的返回值(GetLastTradePriceResult消息)——最新的股票价格。
操作把消息组织到一起而且抽象地代表方法定义。在我们的例子中,这两条消息都在 GetLastTradePrice操作元素下的getLastTradePrice对象方法定义中组织起来。在一个 WSDL文件中的所有操作又都挨个在portType元素内分组。
WSDL文档的余下部分采用服务器上的侦听端点(binding 元素)绑定消息同时把端口定义同单一服务实体(service元素)组合起来。清单A的例子就定义了通过SOAP采用服务所需要的绑定。
WSDL工具
你可以手工创建WSDL文件,不过,你还可以采用相当多的工具通过WSDL来为你自动处理和定义Web服务。推荐工具软件如下:
Omniopera—一图形用户界面的WSDL、XML和XSD编辑器
Microsoft的SOAP Toolkit—一种工具包,其中包括根据WSDL定义创建COM接口的向导程序,还包括根据COM接口创建WSDL的向导程序
IBM的Web Services Toolkit—一种工具包,其中包括产生WSDL和SOAP部署说明的向导程序
什么是axis
Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本
框架。Axis目前版本是为
Java编写的,不过为C++的版本正在开发中。
提供一个简洁的传输抽象框架。其核心引擎完全于传输方式独立。从而使基于何种协议传输的选择更加灵活。
在目前发行1.1版本中有什么东西?
SOAP1.1/1.2引擎。
灵活的配置和部署系统。
支持及时自动生成SOAP服务(JWS)。
支持所有的基本数据类型,为自定义串行操作提供类型映射系统。
JavaBean的自动串行操作,包括将自定义属性类型映射到XML的属性和元素。
RPC和基于消息的SOAP服务提供者。
从部署好的服务自动生成WSDL。
WSDL2Java工具可以从WSDL描述文件中产生相应的客户和服务器端SOAP操作框架。
初步提供安全扩展,能够与Servlet2.2安全集成。
通过HTTP Cookie和与传输无关的SOAP头信息提供会话跟踪。
初步支持带附件的SOAP消息。
在EJB方面提供把EJB作为Web服务的访问途经。
基于Servlet的HTTP传输。
基于JMS的传输。
独立的服务器(但需要HTTP 服务器和Servlet容器支持)。
提供客户端、服务器端相关应用程序的样例。
Web Services使我们能够在网络上建立分布式系统,应用程序组件可以通过任何平台、任何语言和任何方式访问。无论应用程序如何开发,使用了什么语言,以及运行在什么操作系统平台上,只要它作为Web Service,并且为协同解决问题而设计,那么你的应用程序,以任何语言开发或在任何平台上,都可以利用它的服务。这是Web Service的主要概念。
为了实现Web Services的平台无关性和实现访问独立性,软件行业需要遵循一些作为标准的
技术。其中一些包括:
---XML:在Web Services环境中各层之间进行传递的默认数据格式。
---SOAP:封装和交换信息的默认协议。第一次被提出时,它是只取Simple Object Access Protocol(简单对象访问协议)的首字母。但是现在SOAP更多被认为是一个特定的名词,以它自己而命名,同样很多人认为这是用词不当:SOAP实际上不是用来访问对象的。另外,它也不再简单。
---WSDL(Web Services Descrīption Language,Web Services描述语言):描述Web Services的语言。尽管基于XML并且可以被人理解,WSDL主要是由机器处理,由客户端程序读取和理解。
下面的高级层次图表,基于WWW协会发布的“Web Services Architecture”(Web Services架构)文档,显示了这些技术在实际的
工作环境中是如何发挥作用:

这个流程图显示了Web Services中的核心技术是如何工作的。