最新的Web开发教程
 

XML WSDL


  • WSDL是Web服务描述语言
  • WSDL用于描述Web服务
  • WSDL是XML编写
  • WSDL是从2007年6月26日W3C推荐

WSDL文档

一个WSDL文档描述Web服务。 它指定的服务的位置,和该服务的方法,使用这些主要元素:

元件 描述
<types> 定义(XML Schema)由Web服务所使用的数据类型
<message> 定义每个操作的数据元素
<portType> 描述了可进行与所涉及的消息的操作。
<binding> 定义的协议和数据格式的每个端口的类型

WSDL文档的主要结构是这样的:

<definitions>

<types>
  data type definitions........
</types>

<message>
  definition of the data being communicated....
</message>

<portType>
  set of operations......
</portType>

<binding>
  protocol and data format specification....
</binding>

</definitions>

WSDL示例

这是一个WSDL文档的简化的片段:

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

在本实施例的<portType>元素定义"glossaryTerms"作为名称port ,和"getTerm"作为名称operation

"getTerm"操作具有input message被称为"getTermRequest"和一个output message被称为"getTermResponse"

<message>元素定义了parts的每个消息和相关的数据类型。


<portType>元素

所述<portType>元素定义a web service ,该operations可以被执行,并且messages所涉及。

请求 - 响应类型是最常见的操作的类型,但WSDL定义了四种类型:

类型 定义
One-way 操作可以接收消息,但不会返回响应
Request-response 该操作可以接收一个请求并返回一个响应
Solicit-response 该操作可以发送一个请求,将等待响应
Notification 操作可以发送消息,但不会等待响应

WSDL单向操作

单向操作示例:

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

在上面的例子中,端口类型"glossaryTerms"定义了一个名为单向操作"setTerm"

"setTerm"操作允许使用一个新的术语表的信息输入"newTermValues"消息,输入参数"term""value" 。 但是,没有输出的操作定义。


WSDL请求 - 响应操作

请求 - 响应操作示例:

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

在上面的例子中,端口类型"glossaryTerms"定义称为请求-响应操作"getTerm"

"getTerm"操作需要称为输入消息"getTermRequest"了一个名为参数"term" ,并返回称为输出消息"getTermResponse"一个参数叫做"value"


WSDL绑定到SOAP

WSDL绑定定义了Web服务消息格式和协议细节。

请求 - 响应操作示例:

<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="b1">
   <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>
</binding>

binding元素有两个属性-名称和类型。

name的属性(you can use any name you want)定义了绑定的名称, type属性指向的端口绑定,在这种情况下, "glossaryTerms"端口。

soap:binding元素有两个属性-风格和运输。

style属性可以是"rpc""document" 。 在这种情况下,我们使用的文件。 的transport属性定义了SOAP协议使用。 在这种情况下,我们使用HTTP。

operation元素定义端口类型暴露的每个操作。

每个操作对应的SOAP动作已被定义。 您还必须指定输入和输出是如何进行编码。 在这种情况下,我们使用"literal"