WSDL网络服务描述语言

  给大家介绍一下SOA中的WSDL。

1.定义
WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

WSDL 指网络服务描述语言
WSDL 使用XML 编写
WSDL 是一种XML 文档
WSDL 用于描述网络服务
WSDL 也可用于定位网络服务


2.文档
WSDL文档包含了一系列描述某个web service 的定义可更容易地描述允许的文档内容
在WSDL1.1中,文档主要包含了以下内容

元素

定义

<portType>

web service 执行的操作

<message>

web service 使用的消息

<types>

web service 使用的数据类型

为了最大程度的平台中立性,WSDL 使用 XML Schema 语法来定义数据类型。

<binding>

web service 使用的通信协议


具有如下基本结构

<definitions>

<types>
  data typedefinitions........
</types>

<message>
  definition of the data beingcommunicated....
</message>

<portType>
  ……..
</portType>

<binding>
  protocol and data formatspecification....
</binding>

</definitions>

3.具体元素

3.1 WSDL<types>

types元素用作一个容器,用于定义XML模式内置类型中没有描述的各种数据类型。当声明消息部分的有效负载时,消息定义使用了在types元素中定义的数据类型和元素。

例:

<wsdl:types>
        <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            attributeFormDefault="qualified" elementFormDefault="qualified"
            targetNamespace="http://com.liuxiang.xfireDemo/HelloService">
            <xsd:element name="sayHello">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element maxOccurs="1" minOccurs="1"
                            name="name" nillable="true" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="sayHelloResponse">
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element maxOccurs="1" minOccurs="1"
                            name="out" nillable="true" type="xsd:string" />
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
    </wsdl:types>

定义了两个元素,一个是sayHello,一个是sayHelloResponse:

sayHello:定义了一个复杂类型,仅仅包含一个简单的字符串,将来用来描述操作的参入传入部分;
sayHelloResponse:定义了一个复杂类型,仅仅包含一个简单的字符串,将来用来描述操作的返回值;


3.2 WSDL<message>
message元素描述了Web服务使用消息的有效负载。
可以描述输出或者接受消息的有效负载;
还可以描述SOAP文件头和错误detail元素的内容。
定义message元素的方式取决于使用RPC样式还是文档样式的消息传递。
例:
<message name="getTermRequest">
  <part name="term" type="xs:string"/>
</message>

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


3.3 WSDL<portType>

<portType> 元素是最重要的WSDL 元素。
它可描述一个web service、可被执行的操作,以及相关的消息。
可以把<portType> 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
操作类型如下:

类型

定义

One-way

此操作可接受消息,但不会返回响应。

Request-response

此操作可接受一个请求并会返回一个响应

Solicit-response

此操作可发送一个请求,并会等待一个响应。

Notification

此操作可发送一条消息,但不会等待响应。


One-Way 操作
例子:
<message name="newTermValues">
  <part name="term" type="xs:string"/>
  <part name="value" type="xs:string"/>
</message>

<portTypename="glossaryTerms">
  <operation name="setTerm">
    <input name="newTerm" message="newTermValues"/>
  </operation>
</portType>
在这个例子中,端口“glossaryTerms” 定义了一个名为“setTerm” 的one-way 操作。一个operation可以看作是一个方法。
这个"setTerm" 操作可接受新术语表项目消息的输入,这些消息使用一条名为"newTermValues" 的消息,此消息带有输入参数"term" 和"value"。不过,没有为这个操作定义任何输出。

Request-Response 操作
例子:
<message name="getTermRequest">
  <part name="term" type="xs:string"/>
</message>

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

<portTypename="glossaryTerms">
  <operation name="getTerm">
    <input message="getTermRequest"/>
    <output message="getTermResponse"/>
  </operation>
</portType>
在这个例子中,端口"glossaryTerms" 定义了一个名为"getTerm" 的request-response 操作。
"getTerm" 操作会请求一个名为"getTermRequest" 的输入消息,此消息带有一个名为"term" 的参数,并将返回一个名为"getTermResponse" 的输出消息,此消息带有一个名为"value" 的参数。

3.4  WSDL<binding >

binding元素将一个抽象portType映射到一组具体协议(SOAP和HTTP)、消息传递样式、编码样式。通常binding元素与协议专有的元素和在一起使用
例:
<message name="getTermRequest">
  <part name="term" type="xs:string"/>
</message>

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

<portTypename="glossaryTerms">
  <operation name="getTerm">
    <input message="getTermRequest"/>
    <output message="getTermResponse"/>
  </operation>
</portType>

<binding type="glossaryTerms"name="b1">
   <soap:bindingstyle="document"
   transport="http://schemas.xmlsoap.org/soap/http"/>
   <operation>
     <soap:operation soapAction="http://example.com/getTerm"/>
     <input><soap:bodyuse="literal"/></input>
     <output><soap:bodyuse="literal"/></output>
  </operation>
</binding>
binding 元素有两个属性- name 属性和type 属性。
name 属性定义binding 的名称,而type 属性指向用于binding 的端口,在这个例子中是"glossaryTerms" 端口。
soap:binding 元素有两个属性- style 属性和transport 属性。
style 属性可取值"rpc" 或"document"。在这个例子中使用document。transport 属性定义了要使用的SOAP 协议。在这个例子中使用HTTP。
operation 元素定义了每个端口提供的操作符。
对于每个操作,相应的SOAP 行为都需要被定义。同时您必须如何对输入和输出进行编码。在这个例子中使用了"literal"。

3.5  WSDL<service >
service元素包含一个或者多个port元素,其中每个port元素表示一个不同的Web服务。port元素将URL赋给一个特定的binding,甚至可以使两个或者多个port元素将不同的URL赋值给相同的binding。
例子:    

  <wsdl:service name="HelloService">
        <wsdl:port name="HelloServiceHttpPort"
            binding="tns:HelloServiceHttpBinding">
            <wsdlsoap:address
               location="http://localhost:8080/xfire/services/HelloService/>
        </wsdl:port>
    </wsdl:service>


3.6 WSDL<import>
import元素使得可以在当前的WSDL文档中使用其他WSDL文档中指定的命名空间中的定义元素。
通常在用户希望模块化WSDL文档的时候,该功能是非常有效果的。

import的格式如下:

<wsdl:importnamespace="http://xxx.xxx.xxx/xxx/xxx"        location="http://xxx.xxx.xxx/xxx/xxx.wsdl"/>

必须有namespace属性和location属性:
namespace属性:值必须与正导入的WSDL文档中声明的targetNamespace相匹配;
location属性:必须指向一个实际的WSDL文档,并且该文档不能为空。













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值