WebService-WSDL简单介绍
一、什么是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简单介绍的更多相关文章
- WebService的简单介绍与入门使用
WebService是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式 ...
- WebService 的简单使用
简单介绍 WebService是一种跨语言,跨进程,跨机器的数据交互技术. SOAP:简单对象访问协议,通过XML数据交互的轻量级协议,WebService就是采用的这种协议 WSDL:web服务描述 ...
- 【转载】JMeter学习(一)工具简单介绍
JMeter学习(一)工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静 ...
- Reactive ExtensionsLINQ和Rx简单介绍
LINQ和Rx简单介绍 相信大家都用过Language Integrated Query (LINQ),他是一种强大的工具能够从集合中提取数据.Reactive Extensions(Rx)是对LIN ...
- Phoenix(sql on hbase)简单介绍
Phoenix(sql on hbase)简单介绍 介绍: Phoenix is a SQL skin over HBase delivered as a client-embedded JDBC d ...
- WebService WSDL结构分析
转载地址:http://blog.csdn.net/sunchaohuang/article/details/3076375 WSDL (Web Services Description L ...
- WebService的基本介绍
一.WebService的基本介绍 1.WebService是什么? WebService ---> Web Service web的服务 2.思考问题: WebService是we ...
- JMeter学习工具简单介绍
JMeter学习工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...
- Web Services简单介绍
Web Services简单介绍 Web Services入门 一.Web Services简介 1.什么是Web Services? Web Services 是应用程序组件 Web Service ...
随机推荐
- 赠 看穿一切的var_dump
看穿一切的var_dump同学让我送他一首诗,于是作诗如下: 看穿一切被看穿,莫让年少酿毒烟.骄心当制能补拙,拨开云雾见上仙!
- ios Instruments 内存泄露
本文转载至 http://my.oschina.net/sunqichao/blog?disp=2&p=3 虽然iOS 5.0版本之后加入了ARC机制,由于相互引用关系比较复杂时,内存泄露还是 ...
- Java环境变量中classpath是必须配置吗
设置环境变量在java 中需要设置三个环境变量(1.5之后不用再设置classpath了,但个人强烈建议继续设置以保证向下兼用问题)JDK安装完成之后我们来设置环境变量:右击“我的电脑”,选择“属性” ...
- BNU4208:Bubble sort
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面.即首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如 ...
- stringstream读入每行数据
做了下阿里的编程测试题,就30分钟,不是正常的输入输入,直接给一个数组作为输入. 于是带想题和处理数据花了20分钟,最后10分钟搞一个dij模版, 竟然只过了66%,应该是我数组开小了. 题目数据量没 ...
- 小程序 - API 踩坑记录(更新中...)
API 小程序API结构导览图: 声明: 请尊重博客园原创精神,转载或使用图片请注明: 博主:xing.org1^ 出处:http://www.cnblogs.com/padding1015/
- Android 跨进程调用忽略权限
Framework层: @Override public StackInfo getStackInfo(int stackId) { final int callingUid = ...
- Eclipse常用快捷键 及 不格式化注释
eclipse不格式化注释 - [自写] 2007-08-15 刚才在Eclipse3.2上写东西,我写好的注释,整整齐齐的,我一格式化代码,就变得七七八八的了. 试着在Perferences ...
- postgresql 表空间创建、删除
表空间:字面上理解就是表存储的物理空间,其实包括数据库的表.索引.序列等. 可以将表空间创建在服务器的不同分区,这样做的好处有: 一.如果初始化集群所在分区已经用光,可以方便的其他分区上创建表空间已达 ...
- 【vue】---Object.defineProperty基本使用---【巷子】
1.object.defineProperty 给一个对象定义一个新的属性或者在修改一个对象现有的属性,并返回这个对象 语法: Object.defineProperty(参数1,参数2,参数3) 参 ...