Web services详解 :入门必看 | WSDL、SOAP
文章目录
- 概念
- 交互过程
- Web services 三种基本元素:
- SEI和CXF
- WSDL
- 概念
- WSDL文档结构
- ``
- **Operation**(操作)
- ``
- ***binding*** 元素
- ***soap:binding*** 元素
- ***operation*** 元素
- WSDL1.2语法示例
- 图解
- SOAP
- 概述
- 结构
- 语法规则
- soap:encodingStyle
- ``
- ``
- ``
- Fault 元素的子元素:
- SOAP Fault 代码
概念
Web Service是基于网络的、分布式的模块化组件,通过 Web 进行发布、查找和使用**。**是应用程序组件使用开放协议进行通信, 是独立的(self-contained)并可自我描述, 可通过使用UDDI来发现,可被其他应用程序使用。
其实WebService就是一种跨编程语言和跨操作系统平台的远程调用技术(RPC的一种实现方式)。
交互过程
Web Services 都是放在Web服务器(如IIS)的。
WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用,并注册到UDDI服务器,以便被人查找。
客户根据 WSDL 描述文档,使用XML封装一个 SOAP 请求消息,嵌入在一个HTTP POST请求中,发送到 Web 服务器来。
Web 服务器再把这些请求转发给 Web Services 请求处理器。
由请求处理器解析收到的 SOAP 请求,调用 Web Services,然后再生成相应的 SOAP 应答。
Web 服务器得到 SOAP 应答后,会再通过 HTTP应答的方式把信息送回到客户端。
Web services 三种基本元素:
- SOAP (简易对象访问协议)
- UDDI (通用描述、发现及整合)
- UDDI 是一种由 WSDL 描述的网络服务接口目录,通过它,企业可注册并搜索 Web services。
- UDDI是统一描述、发现和集成(Universal Description, Discovery, and Integration)的缩写。
- 它是一个基于 XML 的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务。
- UDDI 指通用的描述、发现以及整合(Universal Description, Discovery and Integration)。
- UDDI 是一种用于存储有关 web services 的信息的目录。
- UDDI 经由 SOAP 进行通迅。
- UDDI 被构建于 Microsoft .NET 平台之中。
- WSDL (Web services 描述语言)
SEI和CXF
SEI:WebService EndPoint Interface(终端,WebService的终端接口),就是WebService服务器端用来处理请求的接口;我们可以理解为是xxxWebService的各个xxxWebServiceImpl实现类
CXF:Celtix + XFire,一个apache的用于开发webservice服务器端和客户端的框架
WSDL
https://blog.csdn.net/wenzhi20102321/article/details/68486526
https://www.cnblogs.com/antLaddie/p/14968268.html
概念
WSDL (Web services 描述语言)
- 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言。
- WSDL 指网络服务描述语言
- WSDL 使用 XML 编写
- WSDL 是一种 XML 文档
- WSDL 用于描述网络服务
- WSDL 也可用于定位网络服务
- WSDL 还不是 W3C 标准
WSDL文档结构
⼀个WSDL⽂档通常包含8个重要的元素,即definitions、types、import、message、portType、operation、binding、service元素。
元素 | 定义 | |
---|---|---|
<portType>
|
web service 执行的操作 | 相当于一个controller,描述了一个个 web service接口信息,如接口是否有输入输出、使用哪个message作为输入输出、接口的描述信息等 |
<message>
|
web service 使用的消息 | 定义接口的输入输出参数,由一个或者多个 part (参数)组成。 |
<types>
|
web service 使用的数据类型 | 定义数据类型,它使用某种类型系统(如 XSD) |
<binding>
|
web service 使用的通信协议、消息传递样式、编码样式 |
定义portType的消息格式和协议细节。<binding type="glossaryTerms" name="b1"> type绑定一个portType,name为自定义名称,定义每个接口的soap;定义为绑定和网络地址组合的单个端点。
|
definitions | 封装整个WSDL文档 | |
import | 导入其他WSDL文档,location为文档wsdl地址,namespace为指向的wsdl的命名空间 | |
service和port | service包含可多个port,每个port表示一个web服务,port将url赋给某个binding,多个port可以将不同url指向同个binding |
<portType>
portType使用operation
描述一个个的操作(接口)。
Operation(操作)
WSDL定义了四种操作:
1.单向(one-way):仅服务端接收请求/消息;
2.请求-响应(request-response):服务端接收请求/消息,并响应相关消息;
3.要求-响应(solicit-response):服务端发送请求/消息,并等待接收一个响应;
4.通知(notification):仅服务端发送请求/消息。
示例1:接受一个newTermVa
lues类型的输入参数,没有输出
<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 >示例2:接受一个getTermRequest类型的输入参数,输出一个getTermResponse类型参数
<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>还有两种操作类型:
Solicit-response 此操作可发送一个请求,并会等待一个响应。
Notification 此操作可发送一条消息,但不会等待响应。
<binding>
将⼀个抽象portType映射到⼀组具体协议(SOAO和HTTP)、消息传递样式、编码样式
binding 元素
两个属性:
- name 属性(定义 binding 的名称)
- type 属性(指向绑定的portType端口)
soap:binding 元素
两个属性:
- style 属性可取值 “rpc” 或 “document”
- transport 属性定义了要使用的 SOAP 协议。在这个例子中我们使用 HTTP。
operation 元素
定义了每个接口的 SOAP 行为、输入和输出编码等,在这个例子中我们使用了 "literal"编码
<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><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>
WSDL1.2语法示例
<!-- 定义wsdl名称、命名空间等,1、xmlns:xxx:引用,相当于Java里面的import;2、name:SEI定义名称;3、targetNamespace:命名空间,相当于Java里面的package -->
<wsdl:definitions name="nmtoken"? targetNamespace="uri"><!-- 导入其他WSDL文档,location为文档wsdl地址,namespace为指向的wsdl的命名空间 --><import namespace="uri" location="uri"/> *<!-- documentation用于声明注释 --><wsdl:documentation .... /> ?<!-- 定义数据类型 --><wsdl:types> ?<wsdl:documentation .... /> ?<xs:schema> <!--定义一个复杂类型,但此类型为空(就是说countAllStudent方法为空参数)--><xs:complexType name="countAllStudent"><xs:sequence/></xs:complexType></xs:schema></wsdl:types><!-- 定义接口参数 --><wsdl:message name="ncname"> *<wsdl:documentation .... /> ?<!-- element:引用指定的类型,类型在types中定义 --><part name="ncname" element="qname"? type="qname"?/> *</wsdl:message><!-- 接口集合 --><wsdl:portType name="ncname"> *<wsdl:documentation .... /> ?<!-- 定义某接口的输入、输出、报错信息 --><wsdl:operation name="ncname"> *<wsdl:documentation .... /> ?<wsdl:input message="qname"> ?<wsdl:documentation .... /> ?</wsdl:input><wsdl:output message="qname"> ?<wsdl:documentation .... /> ?</wsdl:output><wsdl:fault name="ncname" message="qname"> *<wsdl:documentation .... /> ?</wsdl:fault></wsdl:operation></wsdl:portType><wsdl:serviceType name="ncname"> *<wsdl:portType name="qname"/> +</wsdl:serviceType><!-- 将⼀个抽象portType映射到⼀组具体协议(SOAO和HTTP)、消息传递样式、编码样式,1、name:实现类名称;2、type:指定一个portType --><wsdl:binding name="ncname" type="qname"> <!-- 绑定什么类型的数据用来请求响应,style:绑定的数据是一个document(就是xml格式类型的请求响应) --><soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/><wsdl:documentation .... /> ?<-- binding details --> *<!-- 用来指定SEI中的处理请求的方法,一般分为请求和响应,name:SEI实现类里的具体实现方法 --><wsdl:operation name="ncname"> *<wsdl:documentation .... /> ?<-- binding details --> *<!-- 指定客户端请求和服务端响应过来的数据类型,use:定义类型literal(文本) --><wsdl:input> ?<wsdl:documentation .... /> ?<-- binding details --></wsdl:input><wsdl:output> ?<wsdl:documentation .... /> ?<-- binding details --> *</wsdl:output><wsdl:fault name="ncname"> *<wsdl:documentation .... /> ?<-- binding details --> *</wsdl:fault></wsdl:operation></wsdl:binding><!-- 定义binding的部署信息 --><wsdl:service name="ncname" serviceType="qname"> *<wsdl:documentation .... /> ?<!-- 每个port指定一个SEI的实现类,绑定一个binding,表示一个Web服务,binding:引用具体的<binding/>标签,name:具体的实现类对象 --><wsdl:port name="ncname" binding="qname"> *<wsdl:documentation .... /> ?<-- address details --><!-- 用来说明当前WebService的请求地址 --> <soap:address location="xxx"/></wsdl:port></wsdl:service></wsdl:definitions>
图解
SOAP
概述
SOAP (简易对象访问协议)
- SOAP 指简易对象访问协议
- SOAP 是一种通信协议
- SOAP 用于应用程序之间的通信
- SOAP 是一种用于发送消息的格式
- SOAP 被设计用来通过因特网进行通信
- SOAP 独立于平台
- SOAP 独立于语言
- SOAP 基于 XML
- SOAP 很简单并可扩展
- SOAP 允许您绕过防火墙
- SOAP 将作为 W3C 标准来发展
结构
一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
- 必需的 Envelope 元素,可把此 XML 文档标识为一条 SOAP 消息
- 可选的 Header 元素,包含头部信息
- 必需的 Body 元素,包含所有的调用和响应信息
- 可选的 Fault 元素,提供有关在处理此消息所发生错误的信息
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"><soap:Header>......
</soap:Header><soap:Body>......<soap:Fault>......</soap:Fault>
</soap:Body></soap:Envelope>
语法规则
- 必须用 XML 来编码
- 必须使用 SOAP Envelope 命名空间http://www.w3.org/2001/12/soap-envelope
- 必须使用 SOAP Encoding 命名空间http://www.w3.org/2001/12/soap-encoding
- 不能包含 DTD 引用
- 不能包含 XML 处理指令
soap:encodingStyle
soap:encodingStyle用于定义在文档中使用的数据类型。此属性可用在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。
<soap:Header>
如果使用 Header 元素,则它必须是 Envelope 元素的第一个子元素。
<soap:Body>
Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。
<soap:Fault>
Fault 元素用于指示错误消息,使用时必须是 Body 元素的子元素。
在一条 SOAP 消息中,Fault 元素只能出现一次。
Fault 元素的子元素:
子元素 | 描述 |
---|---|
<faultcode>
|
供识别故障的代码 |
<faultstring>
|
可供人阅读的有关故障的说明 |
<faultactor>
|
有关是谁引发故障的信息 |
<detail>
|
存留涉及 Body 元素的应用程序专用错误信息 |
SOAP Fault 代码
在下面定义的 faultcode 值必须用于描述错误时的 faultcode 元素中:
错误 | 描述 |
---|---|
VersionMismatch | SOAP Envelope 元素的无效命名空间被发现 |
MustUnderstand | Header 元素的一个直接子元素(带有设置为 “1” 的 mustUnderstand 属性)无法被理解。 |
Client | 消息被不正确地构成,或包含了不正确的信息。 |
Server | 服务器有问题,因此无法处理进行下去。 |
Web services详解 :入门必看 | WSDL、SOAP相关推荐
- Web.config配置文件详解(新手必看)
Web.config配置文件详解(新手必看) 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点. ...
- Web Services 详解
为什么80%的码农都做不了架构师?>>> 解决异构系统的通讯和整合 Axis,Xfire,CXF 首先我来介绍一下Web Services的相关概念: 1.WSDL ( ...
- 索尼android sd卡上,SD卡各个文件夹功能详解 入手必看经验!!!!
对于初次使用Android系统的新手来说,当打开SD开一看,里面那些林林总总的文件夹总会让自己不知所措,有些看文件夹名称,还能猜到点作用来,但是大部分的都不知道是做什么的 1..android_sec ...
- 计算机进制、内存模块详讲-入门必看(超详细)
本文旨在让你掌握最基本的计算机进制及内存的知识,相信入门的朋友看完后大有帮助 因为部分排版原因电脑观看效果最佳 文中 ...
- python工具安装教程_Python 开发工具PyCharm安装教程图文详解(新手必看)
一.概念理解1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行jso ...
- 不可重复读和幻读详解(必看!!!)
前言:看了很多关于MySQL隔离级别的视频和文章,发现了一个问题,大家都是说,不可重复读是在一个事务中读到了另一个事务提交后修改后的数据,而幻读是一个事务读到了另一个事务中添加并提交后的数据.那么删除 ...
- Web自动化测试Selenium【入门必看】
目录:导读 1.Web自动化测试简介 2.功能测试和自动化测试的区别 3.自动化测试流程 4.自动化测试用例和手工测试用例的区别 5.为什么要做自动化? 6.是否适合做自动化? 7.在什么情况下做自动 ...
- RPC框架详解(必看)
1.RPC介绍 RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想.RPC 是一种技术思想而非一种规范或协议 ...
- Web.config详解+asp.net优化(1)
一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式) ...
最新文章
- 来玩Play框架07 静态文件
- django DateField需要前端传递的格式
- Spring Boot2.x-15 整合RabbitMQ 及RabbitMQ的基本使用
- boost::function模块boost::lambda::bind用法的测试程序
- android 获取连接WiFi的名称
- 流程再造:信息化建设的最佳拍档
- 推荐系统(3)-协同过滤2-矩阵分解算法
- Python heapq库的用法介绍
- 使用Docker搭建hadoop集群
- kafka + storm 错误 Async loop died
- 三点坐标求三角形的面积
- paip.python错误解决16
- c#自定义类的指定字段排序
- 页游终端服务器,页游定制高防服务器秒解封服务器
- 008高级用法markdown编写幻灯片
- 悬崖寻路问题Sarsa和QLearning实现
- 设置头像框为圆形,且图片填充头像框
- Visual C++实现黑白棋游戏项目实战二:界面的设计与实现(附源码和资源 超详细)
- orcale 基本語法
- 对计算机接口提出的新要求吗,2017年秋微机原理与接口技术
热门文章
- android手机如何加速,小技巧:如何给Android手机上的Chrome浏览器加速
- ui界面设计做什么:ui设计具体是什么
- UI设计和平面设计区别是什么?
- 解决:ValueError: multi_class must be in (‘ovo‘, ‘ovr‘)
- python米和厘米转换代码_用Python写一个朴素的长度单位转换器
- C++PrimerPlus 学习笔记 | 第八章 函数探幽 |3.默认参数 4.函数重载
- asp毕业设计——基于Delphi+udp+UDP的基于局域网的信息收发系统设计与实现(毕业论文+程序源码)——教务信息管理系统
- php 打开word显示无法打开文件,word无法打开文件,因为内容有误怎么办
- java xml用word打开乱码,word打开是乱码的5种方法
- 9张逻辑思维图,迅速提升你的工作能力