WSDL学习笔记

来源:互联网 发布:遴选数据库收录期刊 编辑:程序博客网 时间:2024/04/29 17:04

一、            WSDL简介

1. 什么是WSDL

ü  是网络服务描述语言

ü  使用XML编写

ü  也可以用于定位网络服务

二、            WSDL文档

1. WSDL文档结构

WSDL文档用这些主要元素描述web service(本文中建成ws):

 <wsdl:portType>     ws可以执行的操作
<wsdl:message>      ws
使用的消息?

<wsdl:types>            ws使用的数据类型

<wsdl:binding>         ws使用的通讯协议

一个WSDL文档的主要结构:

<?xml version="1.0" encoding="UTF-8"?>

<wsdl:definitions>

 

  <wsdl:types>

         ……

  </wsdl:types>

  

  <wsdl:message name="settleMessageRequest">

         ……

  </wsdl:message>

     

  <wsdl:portType name="WebServiceClientPortType">

         ……

  </wsdl:portType>

    

  <wsdl:binding>

         ……

  </wsdl:binding>

   

  <wsdl:service name="WebServiceClient">

         ……

  </wsdl:service>

</wsdl:definitions>

WSDL文档可以包含其他元素

 

WSDL types元素定义ws使用的数据类型,为了达到平台中立性,WSDL使用XML Schema语法来定义数据类型

WSDL message元素定义一个数据操作的元素,类似于函数的参数

WSDL portType元素是最重要的WSDL元素,可以描述一个ws所有可执行的操作以及相关信息,类似于函数库

WSDL Binding为每个portType定义消息格式和协议细节

 

2. WSDL实例

简化的WSDL文档片段

 

<message name=”getNameRequest”>

         <part name=”term” type=”xs:string”>

</message>

<message name=”getNameResponse”>

         <part name=”value” type=”xs:stirng”>

</message>

<portType name=”glossaryTerms”>

         <operation name=”getTerm”>

                   <input message=”getNameRequest”/>

                   <output message=”getNameResponse”/>

         </operation>

</portType>

在这个例子中,glossaryTermsportType名称,getTerm为操作名称,getTerm拥有一个名为getNameRequest的输入消息,一个名为getNameResponse的输出消息

<message>可以定义每个message的部件part,以及相关联的数据类型

三、            WSDL端口portType

WSDLportType描述ws所有的操作

1. 操作类型

WSDL定义了四种操作类型

One-way                              此操作服务端接受消息,但不会返回响应

Request-response            服务端接受一个消息,并返回给客户端一个响应

Solicit-response                 服务端发起一个请求,客户端返回一个响应

Notification                         服务端发送给客户端一个通知。?

2. One-way操作

<message name="newTermValues">

   <part name="term" type="xs:string"/>

   <part name="value" type="xs:string"/>

</message>

 

<portType name="glossaryTerms">

   <operation name="setTerm">

      <input name="newTerm" message="newTermValues"/>

   </operation>

</portType >

3. Request-Response 操作

<message name="getTermRequest">

   <part name="term" type="xs:string"/>

</message>

 

<message name="getTermResponse">

   <part name="value" type="xs:string"/>

</message>

 

<portType name="glossaryTerms">

  <operation name="getTerm">

    <input message="getTermRequest"/>

    <output message="getTermResponse"/>

  </operation>

</portType>

4. Solicit-response操作

<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>

先定义output,再定义input

个人理解:client实现nmtoken方法,供server端调用。

四、            WSDL绑定

1. 绑定到SOAP

<message name="getTermRequest">

   <part name="term" type="xs:string" />

</message>

 

<message name="getTermResponse">

   <part name="value" type="xs:string" />

</message>

 

<portType name="glossaryTerms">

  <operation name="getTerm">

      <input message="getTermRequest" />

      <output message="getTermResponse" />

  </operation>

</portType>

 

<binding type=” glossaryTerms” name=”bl”>

         <soap:binding style=”document” transport=” http://schemas.xmlsoap.org/soap/http" />

                   <operation>

    <soap:operation soapAction="http://example.com/getTerm" />

    <input>

<soap:body use="literal" />

    </input>

    <output>

<soap:body use="literal" />

    </output>

                   </operation>

         </soap:binding>

</binding>

 

binding元素有两个属性,type指示要绑定的port(函数库)glossaryTerms

soap:binding元素有两个属性,styletransport

style可以取值为document或者rpc

transport定义SOAP使用的传输协议

soap:body use属性可以取值为literal或者encoded

对于styleuse,推荐使用documentliteral

详细区别见 http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl

transport取值范围?

五、            WSDLUDDI

六、            完整的WSDL语法

原创粉丝点击