2008年1月2日星期三

WebService_003:WSDL介绍

进入IT界10年以来,我一直有这样一个憧憬:
1. 希望用一种语言中立的接口定义语言来描述服务的接口。
2. 希望可以用任何一种技术来是实现这个接口。
3. 希望访问这些服务的时候不必在意它是用哪一种技术实现的。
今天,答案早已经不是什么秘密,它就是WSDL。
【WSDL】: Web Services Description(Definition)Language Web服务描述(定义)语言。
WSDL描述Web服务的公共接口。WSDL基于XML,采用抽象语言描述服务支持的操作和信息,实际使用时再将的具体的网络协议和信息格式绑定给该服务。WSDL由W3C制定,读音为:“Whuz-Duhl”。WSDL的流行版本是1.1,
http://www.w3.org/TR/wsdl;最新版本是2.0 http://www.w3.org/TR/wsdl20/
1. types:a container for data type definitions using some type system (such as XSD)。types定义交换消息的数据类型。为了实现互操作性(interoperability)和平台独立性(neutrality),WSDL选用XML Schema 作为标准数据类型。
<types>
<xsd:schema .... />*
</types>


2. message:an abstract, typed definition of the data being communicated.
message由若干个part构成。每个part都与某种数据类型相关联。
<message name="nmtoken"> *
<part name="nmtoken" element="qname"? type="qname"?/> *
</message>


3. portType:an abstract set of operations supported by one or more endpoints.
端口类型由一个抽象操作和抽象消息构成。
<portType name="nmtoken"> *
<operation name="nmtoken">
<input name="nmtoken"? message="qname"/>
<output name="nmtoken"? message="qname"/>
<fault name="nmtoken" message="qname"/>*
</operation>
</portType >


4. binding:a concrete protocol and data format specification for a particular port type.
(1)SOAP binding
<binding…>
<soap:binding style="rpc or document" transport="uri">
<operation…>
<soap:operation soapAction="uri"? style="rpc or document"?>?
<input>
<soap:body parts="nmtokens"? use="literal or encoded" encodingStyle="uri-list"? namespace="uri"?>
<soap:header element="qname" fault="qname"?>*
</input>
<output>
<soap:body parts="nmtokens"? use="literal or encoded" encodingStyle="uri-list"? namespace="uri"?>
<soap:header element="qname" fault="qname"?>*
</output>
<fault>*
<soap:fault name="nmtoken" use="literal or encoded" encodingStyle="uri-list"? namespace="uri"?>
</fault>
</operation>
</binding>
其中 transport="http://schemas.xmlsoap.org/soap/http" 表示传输方式和SOAP规范的HTTP绑定相一致 。


(2)Java binding(3)EJB binding
(4)JMS binding
(5)HTTP binding




5. service:a collection of related endpoints.<service name="nmtoken">*
<port name="nmtoken" binding="qname"/>*
</service>


6. port:a single endpoint defined as a combination of a binding and a network address.

小结:
(1)
一个portType可以对应多个binding,因为抽象的操作和消息定义可以由不同的技术来实现。
(2)
一个binding可以对应多个port,因为同样的技术实现可以有多个访问地址。


WSDL支持4种消息交换方式:
1.单向(One-way):服务访问端点接收消息。
<operation name="nmtoken">
<input name="nmtoken"? message="qname"/>
</operation>

2.请求响应(Request-response):服务访问端点接收请求消息,然后发送响应消息。
<operation name="nmtoken" parameterOrder="nmtokens">
<input name="nmtoken"? message="qname"/>

<output name="nmtoken"? message="qname"/>
<fault name="nmtoken" message="qname"/>*
</operation>

3.要求应答(Solicit-response):服务访问端点发送要求消息,然后接收应答消息。
<operation name="nmtoken" parameterOrder="nmtokens">
<output name="nmtoken"? message="qname"/>
<input name="nmtoken"? message="qname"/><fault name="nmtoken" message="qname"/>*
</operation>


4.通知(Notification):服务访问端点发送通知消息。
<operation name="nmtoken">
<output name="nmtoken"? message="qname"/>
</operation>

没有评论: