web service 之 WSDL(一)
一、WSDL是什么东东?
Web Services Description Language, 用来描述web service 。
手边有一瓶康师傅绿茶,外面有层外包装层上面注明了商标、成分、有效期等等。
WSDL 就像这个外包装层,它描述了web service 的输入、输出、调用方式等信息。
前面说 web service具有自描述性,正是WSDL实现了自描述性。
二、WSDL整体结构
<wsdl:definitions name="nmtoken"? targetNamespace="uri">
<import namespace="uri" location="uri"/> *
<wsdl:documentation .... /> ?
<wsdl:types> ?
<wsdl:documentation .... /> ?
<xsd:schema .... /> *
</wsdl:types>
<wsdl:message name="ncname"> *
<wsdl:documentation .... /> ?
<part name="ncname" element="qname"? type="qname"?/> *
</wsdl:message>
<wsdl:portType name="ncname"> *
<wsdl:documentation .... /> ?
<wsdl:operation name="ncname"> *
<wsdl:documentation .... /> ?
<wsdl:input message="qname"> ?
<wsdl:documentation .... /> ?
</wsdl:input>
<wsdl:output message="qname"> ?
<wsdl:documentation .... /> ?
</wsdl:output>
<wsdl:fault name="ncname" message="qname"> *
<wsdl:documentation .... /> ?
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>
<wsdl:serviceType name="ncname"> *
<wsdl:portType name="qname"/> +
</wsdl:serviceType>
<wsdl:binding name="ncname" type="qname"> *
<wsdl:documentation .... /> ?
<-- binding details --> *
<wsdl:operation name="ncname"> *
<wsdl:documentation .... /> ?
<-- binding details --> *
<wsdl:input> ?
<wsdl:documentation .... /> ?
<-- binding details -->
</wsdl:input>
<wsdl:output> ?
<wsdl:documentation .... /> ?
<-- binding details --> *
</wsdl:output>
<wsdl:fault name="ncname"> *
<wsdl:documentation .... /> ?
<-- binding details --> *
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="ncname" serviceType="qname"> *
<wsdl:documentation .... /> ?
<wsdl:port name="ncname" binding="qname"> *
<wsdl:documentation .... /> ?
<-- address details -->
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
三、各部分含义
WSDL 文档是利用这些主要的元素来描述某个 web service 的:
元素 定义
<portType> web service 执行的操作
<message> web service 使用的消息
<types> web service 使用的数据类型
<binding> web service 使用的通信协议
portType 可以把 <portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
其下的每个operation 可以看做一个方法。
message 元素定义一个操作的数据元素
每个消息均由一个或多个部件组成。可以把这些部件比作传统编程语言中一个函数调用的参数。
types 元素定义 web service 使用的数据类型。
为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。
binding 元素为每个端口定义消息格式和协议细节。
binding 意绑定。描述如何把operation和SOAP协议关联起来,是把方法绑定到SOAP.
binding 元素有两个属性 - name 属性和 type 属性。
name 属性定义 binding 的名称,而 type 属性指向用于 binding 的端口
soap:binding 元素有两个属性 - style 属性和 transport 属性
style 属性可取值 "rpc" 或 "document"---用于指定SOAP风格。
transport 属性定义了要使用的 SOAP 协议
service 元素指定访问web service的地址