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 元素具有两个属性 - nametype

name 属性(您可以使用任何名称)定义绑定的名称,type 属性指向绑定的端口,在本例中为 “glossaryTerms” 端口。

soap:binding 元素具有两个属性 - styletransport

style 属性可以是 “rpc” 或 “document”。在这种情况下,我们使用 documenttransport 属性定义要使用的 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 在默认命名空间中定义了三个属性。这些属性是:mustUnderstandactorencodingStyle

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 元素的直接子元素可以是命名空间限定的。

示例

<?xml version="1.0"?>

<soap:Envelope

</m:GetPrice>
</soap:Body>

</soap:Envelope>
上面的示例请求了苹果的价格。请注意,上面的 m:GetPriceItem 元素是应用程序特定的元素。它们不属于 SOAP 命名空间

SOAP Fault 元素
可选的 SOAP Fault 元素用于指示错误消息。

SOAP Fault 元素包含了 SOAP 消息的错误和状态信息。

如果存在 Fault 元素,它必须作为 Body 元素的子元素出现。Fault 元素只能在 SOAP 消息中出现一次。

SOAP Fault 元素具有以下子元素:

子元素 描述
<faultcode> 用于标识错误的代码
<faultstring> 错误的人类可读的解释
<faultactor> 导致错误发生的信息
<detail> 包含与 Body 元素相关的应用程序特定错误信息

SOAP 错误代码
当描述错误时,faultcode 元素中必须使用以下定义的 faultcode 值:

错误 描述
VersionMismatchSOAP 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 实现提供了常见传输协议的绑定,例如 HTTPSMTP

HTTP 是同步的并且被广泛使用。SOAP HTTP 请求至少指定了两个 HTTP 头部:Content-TypeContent-Length

SMTP 是异步的,通常在最后一种情况或特殊情况下使用。

JavaSOAP 实现通常为 JMSJava 消息系统)协议提供了特定的绑定。

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,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓手机APP开发___广播概述

安卓手机APP开发___广播概述 目录 概述 关于系统广播 系统广播所发生的更改 接收广播 清单声明的接收器 上下文注册的接收器 对进程状态的影响 发送广播 通过权限限制广播 带权限的发送 带权限的接收 安全注意事项和最佳做法 概述 Android 应用可以通过 Android …

数据分析案例-在线食品订单数据可视化分析与建模分类

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

springmvc揭秘参数解析

参数解析 说到参数解析&#xff0c;springmvc中处理参数的是HandlerMethodArgumentResolver接口 public interface HandlerMethodArgumentResolver { // 判断是否支持该类型参数 boolean supportsParameter(MethodParameter parameter); // 进行参数解析 Object resolv…

[羊城杯 2021]BabySmc

运行就是输入flag 不知道怎么跳过去的 这个应该就是smc加密的函数了 运行完这个函数才能继续往下 int __cdecl main(int argc, const char **argv, const char **envp) {__int64 v3; // rbx__int64 v4; // r12__int64 v5; // r13unsigned __int64 v6; // raxchar v7; // spcha…

学习Vue中图片上传前进行压缩的实现方法

学习Vue中图片上传前进行压缩的实现方法 一、前言1. 为什么要在客户端进行图片压缩&#xff1f;2. Vue组件中实现图片上传前压缩的方法3. 注意事项与优化4. 总结 一、前言 在Web开发中&#xff0c;图片上传是一个常见的功能需求&#xff0c;而客户端对图片进行压缩可以有效减小…

企业如何进行快递运费对账?

在电子面单寄件取代手写纸质面单之后&#xff0c;加上月结寄件模式的推行&#xff0c;企业快递运费对账&#xff0c;成了行政的一个难题...... 早期的手写纸质面单寄件&#xff0c;企业行政或者财务相关人员&#xff0c;遵循寄前审批&#xff0c;寄后报销的原则进行对账。随着电…

FinalShell无法连接Linux

Linux使用Vmware会创建一个网络&#xff0c;让两个子网处于一个网关&#xff0c;这样就能在windows中连接Linux&#xff0c;只有在这种情况下才能FinalShell才能连接Linux

面试题合集(2)

1. Self Attention的时候 Q K T QK^T QKT之后要除以 d ? \sqrt{d}? d ​? 参考苏剑林大神&#xff1a; 浅谈Transformer的初始化、参数化与标准化 模型初始化&#xff1a;介绍了常用的采样分布&#xff0c;包括正态分布、均匀分布和截尾正态分布。并从代数角度理解初始化方…

module_param的用法

在Linux内核模块编程中,`module_param`宏允许你声明一个模块参数。模块参数是指可以在加载模块时从命令行设置的参数,也可以通过/sys文件系统(如果内核配置了CONFIG_SYSFS)在模块加载后进行修改。这些参数对于调整模块的行为而不需要重新编译模块代码非常有用。 使用方法 …

KT6368A双模蓝牙芯片上电到正常发送AT指令或指令复位需要多久

一、简介 KT6368A芯片上电到正常发送AT指令&#xff0c;或者开启蓝牙广播被搜索到&#xff0c;或者指令复位需要多久等等系列问题总结 详细描述 其实这些问题归结到一起&#xff0c;就还是一个问题&#xff0c;芯片上电需要多久的时间 在另外一份文档里面&#xff0c;是有描…

跟我学C++中级篇——if constexpr的应用

一、场景应用 在一个开发场景下&#xff0c;需要动态处理不同类型的数据写入。本来这个非常简单&#xff0c;只要定义一个模板即可搞定&#xff0c;但这里偏偏有一个细节&#xff0c;是调用别人的库来实现写入。而这个库对不同的数据类型的写入&#xff0c;提供了N种不同的函数…

Python实战开发及案例分析(28)—— 预编码算法

预编码算法&#xff08;Precoding Algorithm&#xff09;通常用于无线通信系统中&#xff0c;尤其是多输入多输出&#xff08;MIMO&#xff09;系统中&#xff0c;以提高数据传输的可靠性和效率。预编码是为了在发送端对信号进行处理&#xff0c;以优化传输性能。 在MIMO系统中…

Java设计模式 _行为型模式_访问者模式

一、访问者模式 1、访问者模式 访问者模式&#xff08;Visitor Pattern&#xff09;是一种行为型模式。它允许在不修改已有类结构的情况下&#xff0c;向类中添加新的操作。访问者模式通过将操作封装在一个访问者对象中&#xff0c;使得可以在不改变各个元素类的前提下&#x…

RedisTemplate实战应用--队列等

一、RedisTemplate队列插入 1、从集合左边插入值 https://blog.csdn.net/weixin_43658899/article/details/121040307 leftPush(K key, V value) redisTemplate.opsForList().leftPush("leftdatakey","bbbb");2、从集合左边开始在v1值后边插入新值v2 le…

使用 Django 连接 MySQL 数据库

文章目录 步骤一&#xff1a;安装必要的库和驱动步骤二&#xff1a;配置数据库连接步骤三&#xff1a;执行数据库迁移步骤四&#xff1a;开始使用 MySQL 数据库创建一个模型迁移模型到数据库使用模型进行数据操作创建新记录&#xff1a;查询记录&#xff1a;更新记录&#xff1…

Mac安装第三方软件的命令安装方式

场景&#xff1a; 打开终端命令行&#xff0c;sudo xattr -rd com.apple.quarantine&#xff0c;注意最后quarantine 后面加一个空格&#xff01;然后打开Finder&#xff08;访达&#xff09;&#xff0c;点击左侧的 应用程序&#xff0c;找到相关应用&#xff0c;拖进终端qua…

(超实用)京东订单数据分析案例-维度下钻

1&#xff0c;数据介绍&#xff0c;字段了解 尽可能熟悉业务&#xff0c;多知道字段的含义&#xff0c;字段字段间的逻辑关系&#xff0c;后期数据分析思路才能更清晰&#xff0c;结果才能更准确 2&#xff0c;订单数据分析基本思路 维度下钻 3&#xff0c;代码实现全流程思路…

华为telnet的两种认证方式

华为telnet的两种认证方式 实验拓扑&#xff1a; 实验要求&#xff1a; 1.采用普通密码认证实现telnet 远程登录机房设备R3 2.采用AAA认证服务方式实现telnet 远程登录机房设备R3 实验步骤&#xff1a; 1.完成基本配置&#xff08;设备接口配置IP&#xff0c;此步骤略过&#…

Facebook的隐私保护挑战:用户数据安全的新时代

在全球范围内&#xff0c;Facebook已经成为了不可忽视的社交媒体巨头&#xff0c;它连接着超过20亿的活跃用户。然而&#xff0c;随着其影响力的不断扩大&#xff0c;关于用户隐私和数据安全的问题也愈加引人关注。本文将深入探讨Facebook面临的隐私保护挑战&#xff0c;以及它…

一个程序员的牢狱生涯(47)学法

星期一 学法 二铺不知道什么时候走到了我的身边,向我说道,这是二铺在我进来号子后主动过来和我说话。 我听到二铺这声突兀的说话后,抬起头。这时我才看到,除了二铺,还有六子、棍子都围在我的身边,看着我。虽然六子和棍子依旧一副‘吊儿郎当’的样子,但我从他们几个的眼神…