WSDL属于Web服务的描述层,定义了如何描述Web服务。根据WSDl提供的消息,Web服务的请求者可以构造相应的SOAP消息,以消费Web服务。
WSDL协议将其对服务的描述分为两部分:抽象定义和具体实现。
抽象定义描述了服务的操作和消息
具体实现则定义了诸如绑定等和具体的服务地址相关的消息。
下图是WSDL文档的基本结构:
下图是WSDL协议中各元素之间的主要关系图
- <types>元素用来定义数据结构。定义的数据类型在消息中会被引用。这里要注意的是WSDL本身并没有提供定义数据类型的语言,而是利用已有的语言。如XML Schema.
- <message>元素定义了Web服务之间交换的消息类型。每一条消息可以分成多个部分<part>,<part>元素可以通过types属性来引用在<types>中定义的数据类型,也可以通过<element>元素引用全局定义的元素。
- <portType>元素定义了Web服务支持的操作组。每一个操作由<operation>元素定义,其中又分别通过<input>和<output>元素定义了该操作的输入消息和输出消息。其实就是定义一个接口。
- <binding>元素定义了如何将端口类型绑定到具体的传输协议用,如何格式化数据。应用最广泛的就是SOAP绑定。SOAP绑定规定如何抽取操作中的<message>元素来构造相应的SOAP消息。
- <service>元素用来指明服务的地址。对于每一个定义的绑定,<service>元素包含一个<port>元素来指明它的具体地址。
WSDL1.1定义了和SOAP1.1的绑定,WSDL2.0则定义了和SOAP1.2的绑定。
WSDL2.0与WSDL1.1的改进主要有:
- 根元素为<description>,替代了1.1中的<definitions>
- 去掉了<message>元素,在定义操作时直接引用XML Schema定义的合局元素。
- 使用元素<interface>代替<portType>
- 引入了接口的继承,可以像面向对象一样,通过继承现有的接口来定义新的接口
- 使用元素<endpoint>代替了<port>元素
- 每个<service>只能实现一个接口,但可以包含不同的实现,即可以包含多个<endpoint>元素,分别对应不同的地址和实现。