WebService——SOAP详解

Postman测试WebService SOAP接口的协议级避坑指南 WebService是一种基于SOAP协议的企业级集成技术,其核心依赖WSDL契约定义、SOAP消息封装与ASMX等服务端实现机制。理解SOAP 1.1/1.2命名空间差异、WSDL中binding段落对SOAPAction头的强制约定,以及XML声明encoding与Content-Type字符集必须严格一致,是解决405、400、500及乱码问题的关键原理。该技术广泛应用于政务平台、银行系统和遗留中间件对接场景,而Postman作为轻量调试工具,需绕过REST思维惯性,回归HTTP+XML协议本质进行配 阅读详情
AI摘要

本文详细介绍了SOAP协议,包括其概述、XML结构(如Envelope、Header、Body和Fault元素),以及与HTTP的集成(如Content-Type和Content-Length)。它展示了SOAP如何作为轻量级的分布式对象交互协议在互联网上使用。

SOAP

1、概述

SOAP即(Simple Object Access Protocol)简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息。

SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。

2、语法

2.1、组成部分

一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:

  • 必需的Envelope元素,可把此 XML 文档标识为一条 SOAP 消息
  • 可选的Header元素,包含头部信息
  • 必需的Body元素,包含所有的调用和响应信息
  • 可选的Fault元素,提供有关在处理此消息所发生错误的信息

所有以上的元素均被声明于针对 SOAP 封装的默认命名空间中:http://www.w3.org/2001/12/soap-envelope。

以及针对 SOAP 编码和数据类型的默认命名空间:
http://www.w3.org/2001/12/soap-encoding。

2.2、语法规则

  • SOAP 消息必须用 XML 来编码
  • SOAP 消息必须使用 SOAP Envelope 命名空间
  • SOAP 消息必须使用 SOAP Encoding 命名空间
  • SOAP 消息不能包含 DTD 引用
  • SOAP 消息不能包含 XML 处理指令

2.3、基本结构

SOAP消息的基本结构如下:

<?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>

3、Envelope元素

SOAP 的 Envelope 元素是 SOAP 消息的根元素。它可把 XML 文档定义为 SOAP 消息。

<?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">
  ...
  Message information goes here
  ...
</soap:Envelope>

3.1、xmlns:soap 命名空间

SOAP 消息必须拥有与命名空间 "http://www.w3.org/2001/12/soap-envelope" 相关联的一个 Envelope 元素。如果使用了不同的命名空间,应用程序会发生错误,并抛弃此消息。

3.2、encodingStyle 属性

SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。

语法:

soap:encodingStyle="URI"

实例:

<?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">
  ...
  Message information goes here
  ...
</soap:Envelope>

4、Header元素

可选的 SOAP Header 元素可包含有关 SOAP 消息的应用程序专用信息(比如认证、支付等)。如果 Header 元素被提供,则它必须是 Envelope 元素的第一个子元素。

注意: 所有 Header 元素的直接子元素必须是合格的命名空间。

<?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>
  <m:Trans xmlns:m="http://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

上面的例子包含了一个带有一个 “Trans” 元素的头部,它的值是 234,此元素的 “mustUnderstand” 属性的值是 “1”。

SOAP 在默认的命名空间中 (“http://www.w3.org/2001/12/soap-envelope”) 定义了三个属性。

这三个属性是:actor、 mustUnderstand 以及encodingStyle。这些被定义在 SOAP 头部的属性可定义容器如何对 SOAP 消息进行处理。

4.1、mustUnderstand 属性

SOAP 的 mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。

假如向 Header 元素的某个子元素添加了"mustUnderstand="1",则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。

语法:

soap:mustUnderstand="0|1"

实例:

<?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>
  <m:Trans xmlns:m="http://www.w3schools.com/transaction/"
  soap:mustUnderstand="1">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

4.2、actor 属性

通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非 SOAP 消息的所有部分均打算传送到 SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。

SOAP 的 actor 属性可被用于将 Header 元素寻址到一个特定的端点。

语法:

soap:actor="URI"

实例:

<?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>
  <m:Trans xmlns:m="http://www.w3schools.com/transaction/"
  soap:actor="http://www.w3schools.com/appml/">234
  </m:Trans>
</soap:Header>
...
...
</soap:Envelope>

4.3、encodingStyle 属性

SOAP 的 encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何 SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。

SOAP 消息没有默认的编码方式。

语法:

soap:encodingStyle="URI"

5、Body元素

SOAP Body 元素可包含打算传送到消息最终端点的实际 SOAP 消息。SOAP Body 元素的直接子元素可以是合格的命名空间。

<?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:Body>
  <m:GetPrice xmlns:m="http://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

上面的例子请求苹果的价格。请注意,上面的 m:GetPrice 和 Item 元素是应用程序专用的元素。它们并不是 SOAP 标准的一部分。

而一个 SOAP 响应应该类似这样:

<?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:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>

6、Fault元素

SOAP Fault 元素用于指示错误消息。如果已提供了 Fault 元素,则它必须是 Body 元素的子元素。在一条 SOAP 消息中,Fault 元素只能出现一次。

SOAP 的 Fault 元素拥有下列子元素:

  • <faulcode>:供识别故障的代码
  • <faultstring>:可供人阅读的有关故障的说明
  • <faultactor>:有关是谁引发的故障的信息
  • <detail>:存留涉及Body元素的应用程序专用错误信息

SOAP Fault代码:

  • VersionMismatch:SOAP Envelope 元素的无效命名空间被发现
  • MustUnderstand:Header 元素的一个直接子元素(带有设置为 “1” 的 mustUnderstand 属性)无法被理解。
  • Client:消息被不正确地构成,或包含了不正确的信息。
  • Server:服务器有问题,因此无法处理进行下去。

7、SOAP HTTP Binding

指的是遵守 SOAP 编码规则的 HTTP 请求/响应。

HTTP + XML = SOAP:
SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。
HTTP POST 请求规定至少两个 HTTP 头:

  • Content-Type
  • Content-Length

7.1、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

7.2、Content-Length

SOAP 的请求和响应的 Content-Length 头规定请求或响应主体的字节数。

语法:

Content-Length: bytes

实例:

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

8、实例

在下面的例子中,一个 GetStockPrice 请求被发送到了服务器。此请求有一个 StockName 参数,而在响应中则会返回一个 Price 参数。此功能的命名空间被定义在此地址中: “http://www.example.org/stock”

SOAP请求:

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?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:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

SOAP响应:

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?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:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>
webservice---soap协议 SOAP(SimpleObjectaccessPRotocal,简单对象访问协议)技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是把成熟的基于HTTP的WEB技术与xml的灵活性和可扩展性组合在了一起。 SOAP协议:简单对象访问协议(SOAP:Simple Object Access Protocol),简单对象访问协议(SOAP)是一种轻量的 阅读详情

相关推荐

一篇文章掌握WebService服务、工作原理、核心组件、主流框架

Web Service是一个SOA(面向服务架构)的应用程序,它是不依赖于语言,不依赖于平台,可以实现不同的语言(通过xml 描述)间的相互调用,通过Internet进行基于Http协议的网络应用间的互。通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。** 简单可以理解成:WebService是一种跨编程语言和跨操作系统平台的远程调用技术**。

qq_30713721的博客 8640

【SOAP-WebService系列】SOAP简述

文章目录SOAP是什么SOAP和HTTP SOAP是什么 简述1:SOAP 是用于访问传统Web服务(SOAP-WebServices)的协议。 简述2:SOAP=HTTP+XML+RPC SOAP(Simple Object Access Protocol,即简单对象访问协议) 是广泛用于SOAP-WebServices(传统Web服务)交换数据的一种协议规范。 此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到 莲花(Lotus)、康柏(C

无数_Mirage的博客 9447

webservice soap协议

JAX-WS提供了一组用于开发SOAP协议的Web服务的API,可以轻松地创建和部署SOAP Web服务。总的来说,JAX-WS和Axis是用于开发SOAP协议的Web服务的工具和框架,它们可以与HTTP+SOAP协议一起使用,以实现在Web服务中进行结构化的信息交换。HTTP+SOAP:HTTP+SOAP是一种基于HTTP协议的SOAP Web服务。当您使用 JAX-WS 构建 Web 服务时,您实际上是在使用 SOAP 协议,因为 JAX-WS 是 SOAP 协议的一种 Java 实现。

小涛今天没敲代码的博客 1017

【SOAP-WebService系列】SOAP学习笔记

SOAP(Simple Object Access Protocol,即简单对象访问协议) ,是一个轻量级协议,用于在分散的分布式环境中使用XML在对等体之间交换结构化和类型化的信息。或者更简单地说:SOAP是一个基于XML的通信协议(SOAP被认为是第二代XML协议,第一代具有代表性的技术叫XML-RPC)。

一个老码农 2890

C#调用WebService三种方式详解:从服务引用到手动SOAP

在分布式系统集成和企业级应用开发中,WebService作为一种基于SOAP协议的标准化通信技术,通过WSDL定义服务契约,实现了跨平台、跨语言的互操作性。其核心原理是利用XML进行数据序列化,通过HTTP/HTTPS传输SOAP消息,确保数据交换的严格性和安全性。这项技术的工程价值在于能够无缝对接金融、政务等领域的遗留系统,提供内置的事务与安全支持。在实际应用场景中,开发者常面临服务引用、WCF客户端和手动构建SOAP消息等不同调用方式的选择。本文聚焦C#开发实践,深入剖析Visual Studio服务引

weixin_33672400的博客 337

WebService之Soap服务入门详解

1.什么是webservice先来考虑一个问题,如果我们要在自己的程序里面展示天气预报,那怎么弄?正确的做法是我们发送一个请求到一个系统,他会给我们返回来天气情况。这个就是一个webservice。天气预报系统就相当于webservice的服务端,我们的系统就相当于客户端。2.如何调用别人发布的webservice

诺浅的专栏 11万+

Webservice调用方式:axis,soap详解

转自:[url] http://blog.youkuaiyun.com/baiboy4493/archive/2009/03/13/3987526.aspx [/url]  调用webservice,可以首先根据wsdl文件生成客户端,或者直接根据地址调用,下面讨论直接调用地址的两种不同方式:axis和Soap,soap方式主要是用在websphere下  axis方式调用(Java代码):

WEB安全测试学习中…… 5570

Lumerical-定向耦合器1

概述:本文章使用FDE求解器对定向耦合器进行了数值仿真,讨论了耦合器的间距相关性,耦合长度相关性,波长相关性。讨论了脊形波导和条形波导两种情况。

m0_61776728的博客 4614

webservice 调用 axis,soap详解

转自: http://hardcode.iteye.com/blog/385982 调用webservice,可以首先根据wsdl文件生成客户端,或者直接根据地址调用,下面讨论直接调用地址的两种不同方式:axis和Soap,soap方式主要是用在websphere下 axis方式调用: Java代码   import  java.util.Date;   ...

宿命java 461

Xilinx XDMA IP核配置实战:AXI Memory Mapped vs Stream选型指南(附PCIe调试技巧)

本文深入解析Xilinx XDMA IP核配置中AXI Memory Mapped与AXI Stream两种DMA接口的核心区别与选型策略。针对PCIe高速数据传输场景,详细对比了二者在数据特性、延迟、硬件资源及软件复杂度上的差异,为FPGA工程师在数据采集、实时处理等项目中做出高效设计决策提供实战指南,并附有关键的PCIe调试技巧。

qsc901234的博客 585

MacOS多次踩坑后成功安装Homebrew

来一次性成功安装Homebrew吧 官网提供的安装脚本无法成功安装Homebrew,原因大家都懂的,故采用脚本安装的方式。 下载homebrew的安装脚本brew_install 在Download路径下执行如下脚本 curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install >> brew_install 修改brew_install脚本 修改brew_install脚本。如果你的脚本打开之后是如下

weixin_41847116的博客 1983

【WebService】8.SOAP协议深入详解

我们上次使用客户端向服务器端发送了两次WebService请求,分别是 (1)sayHi请求 向服务端发送一个name,然后服务端回复“你好”和对应的name以及现在的时间。 (2)getAllCats请求 获取所有的宠物猫的数据。 报文大致截图: 我们使用拦截器拦截了以上两个请求的请求报文和回复报文,我们接下来通过一一剖析来深入理解SOAP。 A.对于say

程序猿之洞 3217

FPGA实战:AXI BRAM Controller写时序避坑指南(附Vivado配置步骤)

本文深入探讨了FPGA开发中AXI BRAM Controller的写时序实战要点与常见陷阱。文章聚焦于写地址与写数据通道的握手机制,详细解析了AWREADY、WVALID等关键信号的处理,并提供了Vivado中流水线深度、ECC等关键参数的配置步骤与优化建议,旨在帮助开发者有效规避时序问题,提升系统性能。

weixin_32306683的博客 170

SOA 微服务 RPC WebService Soap关系详解

SOA、RMI、RPC、Rest、RestFul、Soap、WebService详解 目录 一、SOA是什么? SOA的应用场景: SOA主要的使用场景:   ​ 数据总线是什么? SOA最显著的优势: SOA与微服务架构的区别: 二、WebService是什么? (1)...

Tim950709的博客 1301

DeerFlow 系列教程 附录 | 核心文件索引、官方文档索引与推荐阅读顺序

DeerFlow 系列教程 附录本附录汇集了 DeerFlow 项目的核心文件索引、官方文档索引和推荐阅读顺序三份速查资料,方便读者在日常开发和学习中快速定位关键代码与文档。内容按实际项目目录结构整理,所有路径均基于 DeerFlow 2.0 版本验证。

weixin_43674738的博客 328

点云体积计算方法之一 附python代码

另外需要注意,这个只适合点云密集分布的场景来计算体积,比如树木扫描的体积;如果只是有表面积扫描的点云,该方法就不能计算整个物体的体积了。通过计算点云所占用的体素的数量来计算点云的近似体积。这是一个非常粗略的近似值,对于复杂的形状可能不准确。

三维点云技术探索 1888

Retrofit 用Soap协议访问WebService 详解

参考 1、结合Retrofit使用post请求访问WebService 2、retrofit2调用webservice-2.基本实现 前言 1、首先不要把这个想的太复杂,它就是使用【soap】协议的请求,数据格式都是【xml】,基础还是http的post请求,但是它的规范显然更多一些,总体逃不过【Req...

weixin_33827965的博客 711

【DRAM存储器六十六】DDR5介绍--训练相关之CA/CS Training

详述DDR5 CA/CS training过程细节

highman110的博客 199

SOA、RMI、RPC、Rest、RestFul、Soap、WebService 详解

目录SOA 是什么?SOA 的应用场景:SOA 主要的使用场景:数据总线是什么?SOA 最显著的优势:SOA 与微服务架构的区别:WebService 是什么?SOAP:WSDLUDDI什么是 RPC?RPC 工作原理:JAVA 能够使用的远程调用技术:什么是 RMI?什么是 Rest? SOA 是什么? SOA 本质是一种组件模型。下面看一下百度的定义: 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行

Forevermark的博客 843

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2881

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

使用SOAP开发Java Webservice详解

本文的预定读者首先要对j2ee有所了解,熟悉XML,tomcat等基本内容,本文主要是简单介绍一下web服务的基本内容,怎样在Java web开发中构建SOAP服务:    一、SOAP(Simple Object Access Protocol)简单对象访问协议  要了解SOAP,首先就需要了解分布式计算的由来,随着下一代的分布式计算体系web服务的出现,SOAP成为了创建和调用通过网络发布

yangzhengxiali的专栏 1866

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: Java——本地方法(JNA)详解
下一篇: WebService——WSDL详解
吴声子夜歌
博客等级 码龄9年 2688粉丝 2270原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值