分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

WebService-WSDL简单介绍

发布时间:2023-09-06 01:32责任编辑:赖小花关键词:Web

一、什么是WSDL

网络服务描述语言(Web Services Description Language)简称WSDL。作用是通过接口之间的调用实现数据的传输。由于WSDL是基于XML格式的,所以它可以跨平台进行调用。WSDL 文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。这里简单介绍7个主要的元素。

二、7个主要的元素

Types - 数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。

Message - 通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。

Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息对。

PortType - 对于某个访问入口点类型所支持的操作的抽象集合,这些操作可以由一个或多个服务访问点来支持。

Binding - 特定端口类型的具体协议和数据格式规范的绑定。

Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。

Service- 相关服务访问点的集合。

总结为以下3点:

1. 做什么?   服务所提供的操作(方法),对应porttype,operation元素。

2. 怎么做?   数据格式详情(types,message)及访问服务操作的必要协议(Binding)。

3. 在哪做?: 由特定协议约定的网络地址。如URL。 (service,port)。

 

三、type

数据类型定义的容器,它使用某种类型系统(一般地使用XML Schema中的类型系统)。定义了交换信息的数据格式。 为了实现最大的互操作性(interoperability)和平台中立性(neutrality),WSDL选用XML Schema DataTypes(简称XSD)作为标准类型系统,并将它作为固有类型系统。Element元素定义在消息(message)定义中需要的XML元素的类型定义。complexType 元素定义了XML元素由哪些具体的类型组成以及组成元素的顺序。 complexType元素如果放在Types元素下面而又不被element元素包含,那么它就定义了一个公用的数据类型。可以被多个element元素所引用。否则为私有。

<wsdl:types>  <xsd:schema    targetNamespace=""    xmlns=""    xmlns:wsdl=""    elementFormDefault="qualified">    <xsd:complexType name="Transaction">    ???<xsd:sequence>     ?????<xsd:element minOccurs="1" maxOccurs="1" name="number" type="xsd:int" />     ?????<xsd:element minOccurs="0" maxOccurs="1" name="checknumber" type="xsd:int" />     ?????<xsd:element minOccurs="1" maxOccurs="1" name="date" type="xsd:date" />     ?????<xsd:element minOccurs="1" maxOccurs="1" name="header" type="xsd:string" />     ?????<xsd:element minOccurs="1" maxOccurs="1" name="amount" type="xsd:float" />    ???</xsd:sequence>   ?</xsd:complexType>这是一个复杂类型的定义,这个有点像定义了一个叫做Transaction的类,而这个类有属性number,checknumber,date,header和amount。这里定义了一个公用的数据类型结构。  <xsd:element name="LookupTransactionsResponse">    <xsd:complexType>     ?<xsd:sequence>      ??<xsd:element minOccurs="0" maxOccurs="unbounded" name="transactions" type="xsd1:Transaction" />     ?</xsd:sequence>    </xsd:complexType>   </xsd:element>这里定义了一个数据类型元素(element)叫做LookupTransactionsResponse,在这里引用了前面定义的Transaction的集合. 在后面的消息定义中将会引用到这里所定义的数据类型元素。   <xsd:element name="LookupTransactions">    <xsd:complexType>     ??<xsd:sequence>      ????<xsd:element minOccurs="1" maxOccurs="1" name="accountNumber" type="xsd:int" />      ????<xsd:element minOccurs="0" maxOccurs="1" name="date1" type="xsd:date" />      ????<xsd:element minOccurs="0" maxOccurs="1" name="date2" type="xsd:date" />      ????<xsd:element minOccurs="1" maxOccurs="1" name="token" type="xsd:base64Binary" />     ??</xsd:sequence>    </xsd:complexType>   </xsd:element>这里定义的数据类型是一个参数列表,它有accountNumber,date1,date2,token组成。类似于 SomeObject.lookupTransactions(accountNumber,date1,date2,token) 里面的参数列表。complexType 定义在了element里面,那么这个数据类型结构只能是LookupTransactions 私有的了。  </xsd:schema></wsdl:types>

targetNamespace: 相当于java语言里的package(包名逆序写)

minOccurs和maxOccurs,这个属性用来设置该域在结构中发生的次数上下限。缺省情况下每个字段值发生一次。使 用这些属性,你可以改变结构体中一个域发生的次数。

四、 Message

Message具体定义了在通信中使用的消息的数据结构。使用Types所定义的类型来定义整个消息的数据结构。定义了调用该接口的时候,soap请求消息的书写以及调用格式等相关信息。

<wsdl:message name="LookupTransactionsResponse">    <wsdl:part name="parameters" element="xsd1:LookupTransactionsResponse" /></wsdl:message>这里定义了服务在调用之后消息返回的数据格式。其名字为parameters,数据的类型就是xsd1:LookupTransactionsResponse。
<wsdl:message name="LookupTransactions">    <wsdl:part name="parameters" element="xsd1:LookupTransactions" /></wsdl:message>这里定义了访问服务时需要传什么样的数据。

五、PortType,Operation

PortType - 具体定义了一个服务可以访问的接口。是对于某个端口类型所支持操作的抽象集合。某个端口(porttype),如soap端口类型,http端口类型。

Operation - 对服务中所支持的操作的抽象描述,一般单个Operation描述了一个访问入口的请求/响应消息。定义了服务包含的可以被调用的方法个数。

<wsdl:portType name="OnlineBankingPortType">  ??<wsdl : peration name="LookupTransactions">   ????<wsdl:input message="tns:LookupTransactions" />   ????<wsdl : utput message="tns:LookupTransactionsResponse" />  ??</wsdl : peration></wsdl:portType>
这里定义了一个可以访问的方法LookupTransactions。这个方法的入参,又叫入站消息吧是message里面定义的tns:LookupTransactions。 同时这个方法还有一个返回对象,又叫出战消息,是message里面所定义的tns:LookupTransactionsResponse  <wsdl:portType name="ChinaStockWebServiceSoap">     <wsdl :operation name="getStockImageByCode">      ?????<wsdl:documentation xmlns:wsdl=""> sdf </wsdl:documentation>          ?????<wsdl:input message="tns:getStockImageByCodeSoapIn" />          ?????<wsdl :output message="tns:getStockImageByCodeSoapOut" />      </wsdl : peration>  </wsdl:portType>  <wsdl:portType name="ChinaStockWebServiceHttpPost">    ??<wsdl :operation name="getStockImageByCode">     ???????<wsdl:documentation xmlns:wsdl=""> test </wsdl:documentation>    ?????????<wsdl:input message="tns:getStockImageByCodeHttpPostIn" />    ?????????<wsdl :output message="tns:getStockImageByCodeHttpPostOut" />    ??</wsdl : peration>   </wsdl:portType> ?// 这里就定义了两个端口类型soap和httppost。
Types,Message和PortType抽象地描述了是如何调用webservice的,与具体的web服务部署无关。注意这里全部用的是wsdl的命名空间。没有用到soap的命名空间。在后面的绑定和部署就会用到soap消息的命名空间了。


六、Binding 

特定端口类型的具体协议和数据格式规范的绑定。binding 元素描述特定服务接口的协议、数据格式、安全性和其它属性。针对操作和portType中使用的消息指定实际的协议和数据格式规范。

<wsdl:binding name="OnlineBankingPortBinding" type="tns:OnlineBankingPortType">  <soap:binding transport=""/>  <wsdl:operation name="LookupTransactions">   ??<soap:operation soapAction=""/>    <wsdl:input>     ??<soap:body use="literal" />    </wsdl:input>    <wsdl:output>     ??<soap:body use="literal" />    </wsdl:output>  </wsdl:operation></wsdl:binding>

前面所定义的端口类型OnlineBankingPortType 绑定在 soap/http协议上面了。这里用到soap的命名空间进行了绑定。

Soap:binding :指出绑定是针对soap协议格式的。Transport指定了传输协议。Style指定通信风格。有“rpc”和“document”两种风格。

Soap : peration :为SOAP服务操作提供消息。通常可以指明此操作的SOAPActionHTTP头。Soap:body :指出消息如何在SOAP BODY元素中表现。

<wsdl:binding name="HelloServiceHttpBinding" type="tns:HelloServicePortType"> ???????<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> ???????<wsdl:operation name="sayHello"> ???????????<wsdlsoap:operation soapAction="" /> ???????????<wsdl:input name="sayHelloRequest"> ???????????????<wsdlsoap:body use="literal" /> ???????????</wsdl:input> ???????????<wsdl:output name="sayHelloResponse"> ???????????????<wsdlsoap:body use="literal" /> ???????????</wsdl:output> ???????</wsdl:operation></wsdl:binding>

type屬性:引用上面的<portType>

<soap:operation style="document" /> 传输的是document(xml)

input:指定客戶端應用傳過來的数据,<soap:body use="literal" />:文本数据 

output:指定服務器端返回客戶端的数据,<soap:body use="literal" />:文本数据

 

七、Service,Port 

Service- 相关服务访问点的集合。一个服务所有访问入口的部署细节。一个Service往往包含多个访问入口(如URL),每个访问入口都会使用一个port来描述。Port - 定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。由哪个web地址(URL)来访问,绑定到什么样的端口上面。

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

name属性:它用以指定一個服務器端處理請求的入口(就是接口的實現)

binding属性:引用上面定義的<binding>

address : 当前webservice的請求地址 

Soap:address : 为SOAP服务访问指定的网络地址。

下面为多个访问端口的定义Demo:

<wsdl:service name="ChinaStockWebService">  ?<wsdl:documentation xmlns:wsdl=""> test </wsdl:documentation>  ?<wsdl:port name="ChinaStockWebServiceSoap" binding="tns:ChinaStockWebServiceSoap">   ????<soap:address location="" />  ?</wsdl:port>  ?<wsdl:port name="ChinaStockWebServiceHttpGet" binding="tns:ChinaStockWebServiceHttpGet">   ????<http:address location="" />  ?</wsdl:port></wsdl:service>

至此,简单介绍完毕!

 

 

 

 

 

 

 

 

Soap:binding :指出绑定是针对soap协议格式的。Transport指定了传输协议。Style指定通信风格。有“rpc”和“document”两种风格。

WebService-WSDL简单介绍

原文地址:https://www.cnblogs.com/domi22/p/8111554.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved