SOA中的Web服务描述语言(WSDL)

1.定义

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

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

2.文档

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

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

元素是最重要的WSDL 元素。
它可描述一个web service、可被执行的操作,以及相关的消息。
可以把 元素比作传统编程语言中的一个函数库(或一个模块、或一个类)。
操作类型如下:
在这里插入图片描述
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:binding style="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文档,并且该文档不能为空。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值