文章目录

  • 概念
  • 交互过程
  • 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相关推荐

  1. Web.config配置文件详解(新手必看)

    Web.config配置文件详解(新手必看) 花了点时间整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点. ...

  2. Web Services 详解

    为什么80%的码农都做不了架构师?>>>    解决异构系统的通讯和整合 Axis,Xfire,CXF     首先我来介绍一下Web Services的相关概念: 1.WSDL ( ...

  3. 索尼android sd卡上,SD卡各个文件夹功能详解 入手必看经验!!!!

    对于初次使用Android系统的新手来说,当打开SD开一看,里面那些林林总总的文件夹总会让自己不知所措,有些看文件夹名称,还能猜到点作用来,但是大部分的都不知道是做什么的 1..android_sec ...

  4. 计算机进制、内存模块详讲-入门必看(超详细)

    本文旨在让你掌握最基本的计算机进制及内存的知识,相信入门的朋友看完后大有帮助                                           因为部分排版原因电脑观看效果最佳 文中 ...

  5. python工具安装教程_Python 开发工具PyCharm安装教程图文详解(新手必看)

    一.概念理解1.json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串) (1)json.dumps()函数是将一个Python数据类型列表进行jso ...

  6. 不可重复读和幻读详解(必看!!!)

    前言:看了很多关于MySQL隔离级别的视频和文章,发现了一个问题,大家都是说,不可重复读是在一个事务中读到了另一个事务提交后修改后的数据,而幻读是一个事务读到了另一个事务中添加并提交后的数据.那么删除 ...

  7. Web自动化测试Selenium【入门必看】

    目录:导读 1.Web自动化测试简介 2.功能测试和自动化测试的区别 3.自动化测试流程 4.自动化测试用例和手工测试用例的区别 5.为什么要做自动化? 6.是否适合做自动化? 7.在什么情况下做自动 ...

  8. RPC框架详解(必看)

    1.RPC介绍 RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想.RPC 是一种技术思想而非一种规范或协议 ...

  9. Web.config详解+asp.net优化(1)

    一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方式) ...

最新文章

  1. 来玩Play框架07 静态文件
  2. django DateField需要前端传递的格式
  3. Spring Boot2.x-15 整合RabbitMQ 及RabbitMQ的基本使用
  4. boost::function模块boost::lambda::bind用法的测试程序
  5. android 获取连接WiFi的名称
  6. 流程再造:信息化建设的最佳拍档
  7. 推荐系统(3)-协同过滤2-矩阵分解算法
  8. Python heapq库的用法介绍
  9. 使用Docker搭建hadoop集群
  10. kafka + storm 错误 Async loop died
  11. 三点坐标求三角形的面积
  12. paip.python错误解决16
  13. c#自定义类的指定字段排序
  14. 页游终端服务器,页游定制高防服务器秒解封服务器
  15. 008高级用法markdown编写幻灯片
  16. 悬崖寻路问题Sarsa和QLearning实现
  17. 设置头像框为圆形,且图片填充头像框
  18. Visual C++实现黑白棋游戏项目实战二:界面的设计与实现(附源码和资源 超详细)
  19. orcale 基本語法
  20. 对计算机接口提出的新要求吗,2017年秋微机原理与接口技术

热门文章

  1. android手机如何加速,小技巧:如何给Android手机上的Chrome浏览器加速
  2. ui界面设计做什么:ui设计具体是什么
  3. UI设计和平面设计区别是什么?
  4. 解决:ValueError: multi_class must be in (‘ovo‘, ‘ovr‘)
  5. python米和厘米转换代码_用Python写一个朴素的长度单位转换器
  6. C++PrimerPlus 学习笔记 | 第八章 函数探幽 |3.默认参数 4.函数重载
  7. asp毕业设计——基于Delphi+udp+UDP的基于局域网的信息收发系统设计与实现(毕业论文+程序源码)——教务信息管理系统
  8. php 打开word显示无法打开文件,word无法打开文件,因为内容有误怎么办
  9. java xml用word打开乱码,word打开是乱码的5种方法
  10. 9张逻辑思维图,迅速提升你的工作能力