WSDL 是一种XMLApplication,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程过程调用)。WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上,以最终定义具体部署的服务访问点。相关的具体部署的服务访问点通过组合就成为抽象的Web服务。
WSDL文档将Web服务定义为服务访问点或端口的集合。在 WSDL中,由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来,因此可以对抽象定义进行再次使用:消息,指对交换数据的抽象描述;而端口类型,指操作的抽象集合。用于特定端口类型的具体协议和数据格式规范构成了可以再次使用的绑定。将Web访问地址与可再次使用的绑定相关联,可以定义一个端口,而端口的集合则定义为服务。WSDL需要描述两部分的内容,一是接口,二是实现。接口描述了服务的格式,例如服务名,服务参数,服务结果。服务实现则描述了用户所对应提供的输入如何转换成符合某一实现协议的形式。一般情况下,我们使用SOAP作为实现协议,那么客户端在分析了WSDL文件以后,将会把用户的输入转换成SOAP请求。WSDL元素的对象结构示意图WSDL文件示例 <wsdl:definitionsxmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://www.daily-moon.com/classifieds" xmlns:ns1="http://org.apache.axis2/xsd" targetNamespace="http://www.daily-moon.com/classifieds"> <wsdl:types> <xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://org.apache.axis2/xsd" elementFormDefault="unqualified" attributeFormDefault="unqualified"> <xs:elementname="createNewAdRequest"> <xs:complexType> <xs:sequence> <xs:element type="xs:string" name="content"/> <xs:element type="xs:string" name="endDate"/> </xs:sequence> </xs:complexType> </xs:element> <xs:elementname="createNewAdResponse"> <xs:complexType> <xs:sequence> <xs:element type="xs:int" name="newAdId"/> </xs:sequence> </xs:complexType> </xs:element> ... </xs:schema> </wsdl:types> <wsdl:messagename="createNewAdRequestMessage"> <wsdl:part name="part1" element="ns1:createNewAdRequest"/> </wsdl:message> <wsdl:messagename="createNewAdResponseMessage"> <wsdl:part name="part1"element="ns1:createNewAdResponse" /> </wsdl:message> <wsdl:messagename="getExistingAdsResponseMessage"> ... </wsdl:message> <wsdl:portType name="ClassifiedServicePortType"> <wsdl:operation name="createNewAd"> <wsdl:input message="tns:createNewAdRequestMessage"/> <wsdl:output message="tns:createNewAdResponseMessage"/> </wsdl:operation> <wsdl:operationname="finalizeIssue">...</wsdl:operation> <wsdl:operationname="editExistingAd">...</wsdl:operation> <wsdl:operationname="getExistingAds">...</wsdl:operation> </wsdl:portType> <wsdl:bindingname="ClassifiedServiceBinding" type="tns:ClassifiedServicePortType"> <soap:bindingtransport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="createNewAd"> <soap:operation soapAction="createNewAd" /> <wsdl:input> <soap:bodyuse="literal" namespace="http://ws.apache.org/axis2"/> </wsdl:input> <wsdl:output> <soap:bodyuse="literal" namespace="http://ws.apache.org/axis2"/> </wsdl:output> </wsdl:operation> <wsdl:operationname="finalizeIssue">...</wsdl:operation> <wsdl:operationname="editExistingAd">...</wsdl:operation> <wsdl:operationname="getExistingAds">...</wsdl:operation> </wsdl:binding> <wsdl:servicename="ClassifiedService"> <wsdl:portname="ClassifiedServicePort" binding="tns:ClassifiedServiceBinding"> <soap:address location= "http://www.daily-moon.com:8080/axis2/services/ClassifiedService"/> </wsdl:port> </wsdl:service> </wsdl:definitions> 注意:在WSDL2.0中: 仅允许每个 message 包含一个part; portType 的名称已更改为interface; soapAction 已经完全从 WSDL2.0 中删除了; 另一个更改与“消息交换模式”的正式规范有关。WSDL2.0不依赖于用户确定是同时存在输入和输出还是仅有一个输入消息,它允许您具体地声明所使用的模式
-------------------------------------------- 有关命名空间的说明 和许多编程语言一样,在 XML中,经常有必要为各种元素和属性指定“命名空间”。这样就能方便地对具有相同名称但用途不同(来源也可能不同)的元素进行区分。XML 通过URI 引用命名空间。例如,XML 模式命名空间为http://www.w3.org/2001/XMLSchema。不过,为了方便起见,还为其分配了一个别名(或前缀)。例如,此处的模式命名空间的前缀为xs:。请记住,别名只是一个别名而已,重要的是 URI。因此,属于 ns1:命名空间的元素或属性也是模式的 targetNamespace 的一部分。 --------------------------------------------- |
一个WSDL文档里一般包含<types>、<message>、<portType>、<binding>和<service>这几个元素.
service 使用一个特殊的binding,binding是 portType 的一个实现。portType 定义操作,而操作由 messages组成。消息中包含由 types 部分中定义的 XML 组成。