第五章
WSDL是Web Services描述语言(Web Services Description Language)的英文缩写,它是一个描述Web Services功能的协议,是由微软和IBM联合开发的。
1、WSDL的文档结构
(1)、types
types(类型)封装了与交换消息相关的数据类型的定义。
WSDL把XSD用作规范的类型系统,并把XSD当作WSDL内置的类型系统。其定义的基本格式如下:
<definitions ...> <types> <xsd:Schema .../> </types> </definitions>WSDL中可以通过扩展元素来增加类型系统。扩展元素在types元素中出现,types元素用于标识将要使用的类型系统的定义,并为类型定义提供XML容器。
types元素相当于XML模式语言中的Schema元素。
(2)message
一个message(消息)元素可以包含一个或多个逻辑part元素。通过使用消息类型属性,可以使每个part元素与某种类型系统中的类型相关联。message类型属性是可扩展的,WSDL定义了多个消息类型属性与XSD共同使用:
* element 指向一个XSD元素。
* type指向一个XSD简单类型或复杂类型。
定义消息的语法如下:
<definitions ...> <message name="nmtoken"> <part name="nmtoken" element="qname" type="qname"/> </message> </definitions>消息中的name用来设置名字,该名字在WSDL文档中的所有消息中是唯一的。part中的name属性提供的名字在封装的消息的所有part中也是唯一的。
(3)、portType
一个portType(端口类型)是由一组命名的抽象操作和涉及到的抽象消息组成的。
端口类型在WSDL中定义的格式如下:
<wsdl:definitions ...> <wsdl:portType name="nmtoken"> <wsdl:operation name="nmtoken" .../> </wsdl:portType> </wsdl:definitions>1*、 操作(operation)
操作通过name属性来命名,在WSDL中定义了四个支持的操作原语:
** 单向 (One-way) 在终端接收消息;
** 请求-响应 (Request-response) 终端接收消息,然后发出一个相关的消息;
** 恳求-响应 (Solicit-response) 终端发送消息,然后接收相关消息。
** 通知 (Notification) 终端发送消息
这四种操作的语法如下:
@1、 单向操作
<wsdl:definitions ...> <wsdl:portType ...> <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken" message="qname"/> </wsdl:operation> </wsdl:portType> </wsdl:definitions>其中input元素为单向操作指定了抽象的消息格式。
@2、请求-响应操作
<wsdl:definitions ...> <wsdl:portType ...> <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/> </wsdl:operation> </wsdl:portType> </wsdl:definitions>其中,input和output元素分别为请求和响应指定了抽象的消息格式,可选的默认操作为任何错误消息指定的抽象消息格式。
@3、恳求-响应操作
<wsdl:definitions ...> <wsdl:portType ...> <wsdl:operation name="nmtoken" parameterOrder="nmtokens"> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"> </wsdl:operation> </wsdl:portType> </wsdl:definitions>input和output元素分别为恳求和响应指定了抽象的消息格式。可选的默认操作为任何错误消息指定的抽象消息格式。
@4、通知操作
<wsdl:definitions ...> <wsdl:portType ...> <wsdl:operation name="nmtoken"> <wsdl:output name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:portType> </wsdl:definitions>其中output元素为通知操作指定了抽象的消息格式。
*2、操作中的元素名和参数顺序
操作中的input、output的名字在端口类型的所有input和output元素名中是唯一的,如果没有指定名字,WSDL会根据操作的名字为input和output的name属性指定一些默认值,一般会指定为各自操作的名字。
请求/响应 或 恳求/响应操作可以通过parameterOrder属性(nm标记类型)指定一组参数名,属性的值是由空格隔开的消息part名。parameterOrder属性的值必须遵循下列规则:
* part名的顺序反映RPC签名中的参数顺序。
* 返回值不能在列表中出现
* 如果part名出现在输入和输出消息中,那么它是一个in/out参数。
(4)、binding
一个binding(绑定)是由端口类型定义的操作和消息指定具体的协议和数据格式规范的结合。对一个给定端口类型可以有任意数目的绑定,绑定语法如下:
<wsdl:definitions ...> <wsdl:binding name="nmtoken" type="qname"> <-- extensibility element --> <wsdl:operation name="nmtoken"> <-- extensibility element --> <wsdl:input name="nmtoken"> <-- extensibility element --> </wsdl:input> <wsdl:output name="nmtoken"> <-- extensibility element --> </wsdl:output> <wsdl:fault name="nmtoken"> <-- extensibility element --> </wsdl:fault> </wsdl:operation> </wsdl:binding> </wsdl:definitions>使用type属性引用它所绑定的端口类型,绑定内的操作元素与绑定端口类型中的操作元素具有相同名字。另外,绑定必须制定确切的协议,但是不能指定地址信息。
(5)、port
通过为每一绑定指定单一地址后,端口就定义了一个终端。其定义的格式如下:
<wsdl:definitions ...> <wsdl:service ...> <wsdl:port name="nmtoken" bingding="qname"> <-- extensibility element --> </wsdl:port> </wsdl:service> </wsdl:definitions>绑定扩展元素用于指定端口的地址信息。端口只能指定一个地址,并且除了地址信息外,不能指定其他任何绑定信息。
(6)、service
相关端口的集合构成服务(service),服务的定义格式如下:
<wsdl:definitions ...> <wsdl:service name="nmtoken"> <wsdl:port ... /> </wsdl:service> </wsdl:definitions>服务中的端口具有下列特征:
* 端口之间不能相互通信(也就是说,一个端口的输出不能作为另一个端口的输入)。
* 如果服务的多个端口共享一个端口类型,但使用不同的绑定或地址,那么端口是可换的。
* 只要对端口进行检查,就能决定服务的端口类型。
2、WSDL文档中元素的含义
(1)、operation相当于服务内的方法, portType元素中定义了服务内的所有方法,也就是一组操作。
(2)、message元素相当于服务内方法的输入参数 和返回值,但具体是指输入参数还是返回值的工作,在portType元素的operation元素内完成,input元素标识输入参数,output参数标识返回值。message元素中的每个part子元素都对应某个参数,输入参数与输出参数在不同的message中定义,兼作输入、输出的参数在输入的message和输出的message中都有定义。输出message元素以“Response”结尾。
(3)、binding元素包含用于绑定的外部技术的声明。<soap:binding>元素声明将把SOAP作为绑定和传输服务使用。 <soap:binding>元素有两个属性:style和transport。style是一个可选属性,它描述该绑定内操作的性质; transport属性指定HTTP作为该绑定将使用的级别较低的传输服务。其后的WSDL <operation>元素,提供各自操作的绑定细节。<soap:operation>元素就是operation具体绑定细节的一部分,它有一个soapAction属性,SOAP客户机将使用该属性创建SOAP请求。
所以,绑定(binding)实际上就是将服务的抽象定义与实际实现绑定在一起。建立WSDL描述文档的接口文件。
(4)、service元素实际是指WSDL的实现文件。其他部分(types、message、portType、binding)是WebServices的接口文件。因此有的厂商会把wsdl文件分开成为两个文件,例如:Weather_Service-interface.wsdl 和Weather_Service-impl.wsdl 。
该WSDL的实现文件的主要特性如下:
* 实现文件中除引用不同的targetNamespace以外, <definitions>根元素中的其他属性与接口文件完全相同;
* service标记中有一个表示该服务的逻辑名name。service元素内的port元素由绑定和访问地址组成,另外还有文档描述元素documentation。