XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
XML Web服务是一种用于在网络上发布、发现和使用应用程序组件的技术。它基于一系列标准和协议,如WSDL、SOAP、RDF和RSS。下面是一些相关的内容:
WSDL(Web服务描述语言):用于描述Web服务的基于XML的语言,定义了服务的接口、操作和消息格式
SOAP(简单对象访问协议):是一种基于XML的协议,用于在网络上交换结构化信息。它定义了消息的格式和传输规则,并被广泛用于Web服务之间的通信。
RDF(资源描述框架):是一种描述网络资源的框架,使用XML表示。它提供了一种统一的方式来描述资源的属性和关系,是万维网上语义网的基础之一。
RSS(真正简单的信息聚合):是一种用于发布网站内容的XML格式。它允许用户订阅网站的更新,并可以自动获取最新的内容。RSS文件通常用于博客、新闻网站等。
XML Web服务的特点包括:
自包含和自描述:Web服务能够描述自己的接口和功能,使其易于使用和集成到其他应用程序中。
基于开放协议:Web服务使用开放的协议和标准,如HTTP和SOAP,以确保不同平台和系统之间的互操作性。
可重用的组件:Web服务提供了可重用的应用程序组件,如货币转换、天气预报等,可以被其他应用程序调用和集成。
连接现有软件:Web服务可以连接现有的软件系统,并提供一种统一的方式来交换数据和调用功能。
在实际应用中,您可以通过创建和部署Web服务来实现各种功能和服务,从简单的数据转换到复杂的业务逻辑。
XML WSDL
WSDL 是 Web Services Description Language
的缩写
WSDL 用于描述 Web 服务
WSDL 以 XML
形式编写
WSDL 文档
WSDL 文档描述了一个 Web 服务
。它指定了服务的位置以及服务的方法,使用以下主要元素:
元素 描述
定义 Web 服务
使用的 (XML Schema
) 数据类型
为每个操作定义数据元素
描述可执行操作和所涉及的消息。
为每个端口类型定义协议和数据格式
WSDL 文档的主要结构如下:
`<definitions>`
`<types>`
数据类型定义........
`</types>`
`<message>`
传输的数据定义....
`</message>`
`<portType>`
一组操作......
`</portType>`
`<binding>`
协议和数据格式规范....
`</binding>`
`</definitions>`
WSDL 示例
`<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>`
在此示例中,<portType>
元素将 "glossaryTerms" 定义为端口的名称,"getTerm" 定义为操作的名称。
"getTerm" 操作具有名为 "getTermRequest" 的输入消息和名为 "getTermResponse" 的输出消息。
<message>
元素定义了每个消息的部分和关联的数据类型。
<portType>
元素
<portType>
元素定义了一个 Web 服务
,可以执行的操作以及所涉及的消息。
请求-响应类型是最常见的操作类型,但 WSDL 定义了四种类型:
类型 定义
One-way 该操作可以接收消息,但不会返回响应
Request-response 该操作可以接收请求,并将返回响应
Solicit-response 该操作可以发送请求,并将等待响应
Notification 该操作可以发送消息,但不会等待响应
WSDL 单向操作
单向操作示例:
`<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 >`
在上面的示例中,portType
"glossaryTerms" 定义了一个名为 "setTerm" 的单向操作。
"setTerm" 操作允许使用 "newTermValues" 消息输入新术语消息,其中包括输入参数 "term" 和 "value"。但是,没有为操作定义输出。
WSDL 请求-响应操作
请求-响应操作示例:
`<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>`
在上面的示例中,portType
"glossaryTerms" 定义了一个请求-响应操作,名为 "getTerm"。
"getTerm" 操作需要名为 "getTermRequest" 的输入消息,其中包含名为 "term" 的参数,并将返回一个名为 "getTermResponse" 的输出消息,其中包含名为 "value" 的参数。
WSDL 绑定到 SOAP
WSDL 绑定定义了 Web 服务
的消息格式和协议细节。
请求-响应操作示例:
`<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>`
`<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>`
binding
元素具有两个属性 - name
和 type
。
name
属性(您可以使用任何名称)定义绑定的名称,type
属性指向绑定的端口,在本例中为 "glossaryTerms" 端口。
soap:binding
元素具有两个属性 - style
和 transport
。
style
属性可以是 "rpc" 或 "document"。在这种情况下,我们使用 document
。transport
属性定义要使用的 SOAP
协议。在这种情况下,我们使用 HTTP
。
operation
元素定义了 portType
公开的每个操作。
对于每个操作,必须定义相应的 SOAP
动作。您还必须指定如何编码输入和输出。在本例中,我们使用 "literal"。
XML SOAP
SOAP 是 Simple Object Access Protocol
的缩写
SOAP 是一种应用通信协议
SOAP 是用于发送和接收消息的格式
SOAP 是平台无关的
SOAP 基于 XML
为什么使用 SOAP?
Web 应用程序
能够在 互联网
上进行通信是非常重要的。
在 应用程序
之间进行通信的最佳方式是通过 HTTP
,因为 HTTP
受到所有 互联网
浏览器和服务器的支持。SOAP
就是为了实现这一点而创建的。
SOAP
提供了一种在运行在不同操作系统、使用不同技术和编程语言的 应用程序
之间进行通信的方式。
SOAP 构建块
SOAP
消息是一个普通的 XML
文档,包含以下元素:
一个 Envelope
元素,用于标识 XML
文档作为 SOAP
消息
一个包含头信息的 Header
元素
一个包含调用和响应信息的 Body
元素
一个包含错误和状态信息的 Fault
元素
以上所有元素都声明在 SOAP
信封的默认命名空间中
语法规则
以下是一些重要的语法规则:
SOAP
消息必须使用 XML
进行编码
SOAP
消息必须使用 SOAP Envelope
命名空间
SOAP
消息不能包含 DTD
引用
SOAP
消息不能包含 XML
处理指令
该命名空间将 Envelope
定义为 SOAP Envelope
。
如果使用了不同的命名空间,应用程序
将生成错误并丢弃消息。
encodingStyle 属性
encodingStyle
属性用于定义文档中使用的数据类型。该属性可以出现在任何 SOAP
元素上,并应用于该元素及其所有子元素。
SOAP
消息没有默认编码。
SOAP Header 元素
可选的 SOAP Header
元素包含关于 SOAP
消息的应用程序特定信息(如身份验证、支付等)。
如果存在 Header
元素,则必须将其放在 Envelope
元素的第一个子元素位置。
注意:Header
元素的所有直接子元素必须是命名空间限定的。
SOAP
在默认命名空间中定义了三个属性。这些属性是:mustUnderstand
、actor
和 encodingStyle
。
SOAP Header
中定义的属性定义了接收者应该如何处理 SOAP
消息。
mustUnderstand
属性
SOAP mustUnderstand
属性可用于指示接收者是否必须处理头部条目。
如果将 mustUnderstand="1"
添加到 Header
元素的子元素中,表示处理 Header
的接收者必须识别该元素。如果接收者不识别该元素,则在处理 Header
时将失败。
语法
soap:mustUnderstand="0|1"
actor
属性
SOAP
消息可能通过沿着消息路径传递不同的端点从发送方传递到
接收方。然而,SOAP
消息的不是所有部分都可能是针对最终端点的,而是可能针对消息路径上的一个或多个端点。
SOAP actor
属性用于将 Header
元素定向到特定端点。
语法
soap:actor="URI"
encodingStyle 属性
encodingStyle
属性用于定义文档中使用的数据类型。该属性可以出现在任何 SOAP
元素上,它将应用于该元素的内容及其所有子元素。
SOAP
消息没有默认编码。
语法
soap:encodingStyle="URI"
SOAP Body 元素
必需的 SOAP Body
元素包含了消息的实际 SOAP
消息,用于消息的最终端点。
SOAP Body
元素的直接子元素可以是命名空间限定的。
示例
<soap:Envelope
</m:GetPrice>
</soap:Body>
</soap:Envelope>
上面的示例请求了苹果的价格。请注意,上面的 m:GetPrice
和 Item
元素是应用程序特定的元素。它们不属于 SOAP
命名空间
SOAP Fault 元素
可选的 SOAP Fault
元素用于指示错误消息。
SOAP Fault
元素包含了 SOAP
消息的错误和状态信息。
如果存在 Fault
元素,它必须作为 Body
元素的子元素出现。Fault
元素只能在 SOAP
消息中出现一次。
SOAP Fault
元素具有以下子元素:
子元素 描述
<faultcode>
用于标识错误的代码
<faultstring>
错误的人类可读的解释
<faultactor>
导致错误发生的信息
<detail>
包含与 Body
元素相关的应用程序特定错误信息
SOAP 错误代码
当描述错误时,faultcode
元素中必须使用以下定义的 faultcode
值:
错误 描述
VersionMismatch
在 SOAP Envelope
元素的命名空间中找到无效的命名空间
MustUnderstand
Header
元素的立即子元素,mustUnderstand
属性设置为 "1",未被理解
Client
消息格式不正确或包含不正确的信息
Server
服务器出现问题,因此消息无法继续进行
HTTP 协议
HTTP
通过 TCP/IP
进行通信。HTTP
客户端使用 TCP
连接到 HTTP
服务器。建立连接后,客户端可以向服务器发送 HTTP
请求消息:
POST /item HTTP/1.1
Host: 189.123.255.239
Content-Type: text/plain
Content-Length: 200
然后,服务器处理请求并将 HTTP
响应发送回客户端。响应包含指示请求状态的状态代码:
200 OK
Content-Type: text/plain
Content-Length: 200
在上面的示例中,服务器返回了状态代码 200
。这是 HTTP
的标准成功代码。
如果服务器无法解码请求,则可能返回以下内容:
400 Bad Request
Content-Length: 0
SOAP 绑定
SOAP
规范定义了 SOAP
消息的结构,但未定义它们如何交换。这一空白由所谓的 "SOAP 绑定" 填补。SOAP
绑定是允许使用传输协议有效地交换 SOAP
消息的机制。
大多数 SOAP
实现提供了常见传输协议的绑定,例如 HTTP
或 SMTP
。
HTTP
是同步的并且被广泛使用。SOAP HTTP
请求至少指定了两个 HTTP
头部:Content-Type
和 Content-Length
。
SMTP
是异步的,通常在最后一种情况或特殊情况下使用。
Java
的 SOAP
实现通常为 JMS
(Java 消息系统
)协议提供了特定的绑定。
Content-Type
SOAP
请求和响应的 Content-Type
头部定义了消息的 MIME
类型以及用于请求或响应的 XML
主体的字符编码(可选)。
Content-Type: MIMEType; charset=character-encoding
示例
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length
SOAP
请求和响应的 Content-Length
头部指定了请求或响应的主体中的字节数。
Content-Length: bytes
示例
POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览的更多相关文章
- Web服务技术协议:REST与SOAP
Web服务技术就有SOAP(Simple Object Access Protocol,简单对象访问协议)和REST(Representational State Transfer,表示性状态转移) ...
- Web 服务编程,REST 与 SOAP(转)
原文地址:Web 服务编程,REST 与 SOAP REST 简介 在开始我们的正式讨论之前,让我们简单看一下 REST 的定义. REST(Representational State Transf ...
- 构建安全的Xml Web Service系列之初探使用Soap头
原文:构建安全的Xml Web Service系列之初探使用Soap头 Xml Web Service 从诞生那天就说自己都么都么好,还津津乐道的说internet也会因此而进入一个新纪元,可5年多来 ...
- java Web服务实现方案(REST+SOAP+XML-RPC)简述及比较
目前知道的三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Repr ...
- 三种主流的Web服务实现方案(REST+SOAP+XML-RPC)简述及比较
目前知道的三种主流的Web服务实现方案为:REST:表象化状态转变 (软件架构风格)SOAP:简单对象访问协议 XML-RPC:远程过程调用协议 下面分别作简单介绍: REST:表征状态转移(Repr ...
- 【New Feature】阿里云快照服务技术解析
一.背景 目前上云已经成为行业发展趋势,越来越多的企业级客户将业务系统和数据库迁移到云上.而传统的备份一体机/备份软件方式,并不适合云上ECS.RDS等产品的备份与容灾服务.阿里云块存储服务提供云 ...
- 大规模WEB服务技术
CPU负载的扩展很简单,增加相同结构的服务器,通过负载均衡来分散. I/O负载的扩展很困难.要考虑局部性.
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因 ...
- 应用AXIS开始Web服务之旅(soap web services)——使用三种不同的语言访问创建的Web服务,分别是JAVA、VB、VC
一. 介绍 本文并不是想介绍Web服务的原理.系统架构等,我们假设您已经了解了关于Web服务的一些基本的概念.原理等知识.本文主要是针对那些已经了解Web服务概念,但是还没有亲身体会Web服务所带来令 ...
- webServices与Web服务
本篇的内容在MSND中标注已是一项旧技术,而取而代之的是WCF, 那么我也放弃吧!但是这个属于Web服务的范畴,而WCF本质上也是一个Web服务来的,所以对于基础的东西还是不变的.那么这次就着重看看这 ...
随机推荐
- k8s 深入篇———— k8s 的本质[四]
前言 简单整理一下k8s的本质. 正文 首先,Kubernetes 项目要解决的问题是什么? 编排?调度?容器云?还是集群管理? 实际上,这个问题到目前为止都没有固定的答案.因为在不同的发展阶段,Ku ...
- 重新整理数据结构与算法(c#)——算法套路k克鲁斯算法[三十]
前言 这个和前面一节有关系,是这样子的,前面是用顶点作为参照条件,这个是用边作为参照条件. 正文 图解如下: 每次选择最小的边. 但是会遇到一个小问题,就是会构成回路. 比如说第四步中,最小边是CE, ...
- C语言专业课复试整理
C复试专业基础测试整理 运行C程序的步骤和方法 编辑.编译.连接和运行 . 编辑是用户把编写好的C语言源程序输入计算机,以文本文件的形式存放在磁盘上.其标识为:"文件名.c". 编 ...
- 分布式文件存储-FastDFS
1.1 FastDFS简介 1.1.1 FastDFS体系结构 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了 ...
- vue中 如何实现一个单文件组件
前端开发人员只要了解过vue.js框架可能都知道单文件组件.vue.js中的单文件组件允许在一个文件中定义一个组件的所有内容.这是一个非常有用的解决方案,在浏览器网页中已经开始提倡这种机制.但是不幸的 ...
- Oracle nullif函数使用
nullif函数使用 简单来说,就是表达式1的值和表达式2的值进行对比 可以使用''字符 select nullif('','1111') from dual 输出为空 不可以使用null字符 sel ...
- 面试题45(Java)-把数组排成最小的数(中等)
题目: 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个. 示例 1: 输入: [10,2] 输出: "102" 示例 2: 输入: [ ...
- 力扣575(java&python)-分糖果(简单)
题目: Alice 有 n 枚糖,其中第 i 枚糖的类型为 candyType[i] .Alice 注意到她的体重正在增长,所以前去拜访了一位医生. 医生建议 Alice 要少摄入糖分,只吃掉她所有糖 ...
- 力扣61(java&python)-旋转链表(中等)
题目: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置. 示例1: 输入:head = [1,2,3,4,5], k = 2 输出:[4,5,1,2,3] 示例2: 输 ...
- 力扣564(java)-寻找最近的回文数(困难)
题目: 给定一个表示整数的字符串 n ,返回与它最近的回文整数(不包括自身).如果不止一个,返回较小的那个. "最近的"定义为两个整数差的绝对值最小. 示例 1: 输入: n = ...