WebService之SOAP
SOAP(Simple Object Access Protocol),它是一种标准消息传递协议,通常是Web Service的事实标准。SOAP是以XML为基础,SOAP消息格式是由XML Schema模式定义,通过XML命名空间使SOAP具有很强的扩展性。
SOAP message:SOAP XML文档实例,通常通过其他某些网络协议的有效载荷来携带SOAP消息,例如:HTTP, SMTP, TCP/IP等。
WebService可以使用两种消息传递方式:One-Way messaging(单向消息传递)或者Request/Response messaging(请求/响应消息传递)
二、SOAP的基本结构
SOAP中根元素是Envelope元素。Envelope元素中可以包含多个可选的Header元素,必须同时包含一个Body元素。Header元素必须是Envelope元素的直接子元素,并且要位于Body元素之前。
三、SOAP的命名空间
SOAP消息可以在Header元素和Body元素中包含若干不同的XML元素,使用唯一的命名空间来标识它们。
xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/命名空间定义了标准SOAP元素(例如:Envelope, Header和Body等)。Header元素的每个头文件都有自己的命名空间。
四、 SOAP头
SOAP header在Web Service中的应用越来越多,例如安全性、事务以及其他各种服务方面的大量“标准”文件头。SOAP文件头是扩展SOAP协议的一个功能非常强大的措施,SOAP文件头的扩展性是SOAP得以流行并且获得其他协议没有取得成功的另一个原因。
4.1 actor属性(next、ultimate receiver)
Actor是由SOAP注释定义的,在SOAP 1.2中,actor属性已经被更名为role。Actor属性和XML命名空间组合在一起使用,以确定要用哪个代码模块处理具体的Header。
Next角色表示消息路径中的下一个节点必须处理文件头。
Ultimate receiver角色表示只有消息的最终接收方才能处理指定的Header。
4.2 mustUnderstand属性
表示处理是否为强制性处理,如果一个节点不能识别某一个强制性Header,那么必定会产生SOAP错误。
如果MustUnderstand属性的值是0,如果应用程序没有能够识别该文件头,那么必须删除此文件头。
五、SOAP体
Body元素要包含应用程序专有的数据或者错误消息。应用程序的专有数据可以是任意XML数据或者是提供给过程调用的任意参数。只有SOAP消息最后的接收方应该处理SOAP Body。
六、SOAP消息传递模式
SOAP支持四种消息传递模式(RPC/Literal, Document/ Literal, RPC/Encoded, and Document/Encoded),但是WS-I Basic Profile只允许RPC/Literal和Document/ Literal,不支持SOAP encoding,因为它会引起严重的互操作性。Literal表示可以根据XML模式验证XML文档的有效性。
6.1 Document/ Literal消息传递模式
Document/ Literal消息传递模式中,SOAP的Body元素包含一个XML格式良好的文档段;
6.2 RPC/Literal消息传递模式
RPC/Literal消息传递模式将Body元素格式化成struct。PRC请求消息包含调用的方法名称与输入参数。RPC响应消息则包含返回值和各种输出参数(或者错误);
SOAP请求消息:
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mh="http://www.Monson-Haefel.com/jwsbook/BookQuote"> <soap:Body> <mh:getBookPrice> <isbn>0321146182</isbn> </mh:getBookPrice> </soap:Body> </soap:Envelope>
SOAP返回消息
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mh="http://www.Monson-Haefel.com/jwsbook/BookQuote" > <soap:Body> <mh:getBookPriceResponse> <result>24.99</result> </mh:getBookPriceResponse> </soap:Body> </soap:Envelope>
6.3 消息传递模式和消息交换模式
Messaging Modes:(RPC/Literal, Document/ Literal, RPC/Encoded, and Document/Encoded)。消息传递模式通常描述的是SOAP消息的有效负载:即XML文档段或者是远程过程调用对应的参数和返回值的XML表示。
Messaging Exchange Patterns (MEPs):One-Way and Request/Response MEPs。消息交换模式表示的是消息的流向,而不是消息的内容
七、SOAP错误
SOAP错误是由消息接收方(消息的中介体或者最终接收方)产生的。只有使用的请求/响应消息传递模式的时候,才要去接收方将SOAP错误传递给发送方。
7.1 faultcode元素
faultcode表示错误错误代码,包括Client、Server、VersionMismatch和MustUnderstand不同类型。
Client表示传递SOAP消息的节点出现了错误(发送错误),例如:消息不是一个良好的格式,或者包含无效数据、缺少所期望的信息,接收节点就会产生一个Client错误。
Server表示接收到SOAP消息的节点发生故障或者不能处理SOAP消息(中介体或者最终接收方引起的错误)。例如:当接收节点处理SOAP消息不能连接到数据库等资源,就会产生一个Server错误。
VersionMismatch表示接收节点不能识别SOAP消息的Envelope元素的命名空间,例如:SOAP 1.1的节点接收到SOAP1.2消息。
MustUnderstand表示节点不能识别“MustUnderstand=1”指定的header,就会产生这个类型的fault。
还有一些非标准的错误信息例如:
<soap:Body> <soap:Fault> <faultcode>wsse:InvalidSecurityToken</faultcode> <faultstring>An invalid security token was provided</faultstring> <detail/> </soap:Fault> </soap:Body>
7.2 faultstring元素
faultstring表示错误的描述,是强制性元素,可以使用特殊属性xml:lang表示文本消息使用的语言。
7.3 faultactor元素
faultactor表示遇到错误并且产生错误的节点,如果错误节点是一个中介节点,那么需要使用faultactor元素,但是如果错误节点是最终接收方,则该元素可选。
7.4 detail元素
如果Body元素的内容产生错误,必须包含错误消息的detail元素,但是如果文件头发生错误,则不能包含该元素
八、SOAP和HTTP
目前最常用SOAP的传输体是HTTP。大多数HTTP的传输由HTTP GET请求和HTTP应答组成的,HTTP GET请求指定了请求的页面,可以包含一些参数,HTTP response作为有效负载返回到到请求方。另外,HTTP POST请求有效负载,所以适合携带SOAP消息。
8.1 HTTP POST消息传输的SOAP
HTTP POST消息必须包含SOAPAction文件字头;SOAP1.2用(“application/soap+xml”) MIME类型替换SOAPAction文件头。
Content-Type是text/xml,表示有效负载是一个XML文档。带附件的SOAP会指定mulitpart/related,但是不推荐这样做。
8.2 HTTP响应代码
200-level的HTTP成功代码包括:
200 OK表示消息没有错误;包含一个正常的SOAP响应消息。
200 Accepted:表示成功处理了请求,但是没有SOAP响应数据,类似与void返回类型。
400-level错误
400 Bad Request:表示SOAP消息中的HTTP请求或者XML格式不正确
405 Method Not Allowed:如果不是通过HTTP POST方式传递的SOAP消息,返回此错误。
415 Unsupported Media Type:text/xml值包含一个Content-Type文件头,否则将返回此错误。
500 Internal Server Error:当请求/响应MEP中的响应消息是SOAP错误时,必须使用此代码。
WebService之SOAP的更多相关文章
- SOA,Webservice,SOAP,REST,RPC,RMI的区别与联系
SOA,Webservice,SOAP,REST,RPC,RMI的区别与联系 SOA面向服务的软件架构(Service Oriented Architecture) 是一种计算机软件的设计模式,主要应 ...
- webservice、soap、wsdl
搜集了一些关于webservice.soap.wsdl的基本知识,解决工作中遇到的疑问 一 .什么是webservice(用你的话描述webservice)?在什么时候用webservice(webs ...
- Python 开发与测试 Webservice(SOAP)
WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理解WebService 1.从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是 ...
- webService 发送soap请求,并解析返回的soap报文
本例应用场景:要做一个webService测试功能,不局限于任何一种固定格式的webService,所以像axis,cxf等框架就不好用了.只有深入到webService的原理,通过发收soap报文, ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- Web Service学习笔记(webservice、soap、wsdl、jws详细分析) (转)
Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...
- WebService之Soap头验证入门
1.新建一个类,如"AuthHeaderUser",继承于"System.Web.Services.Protocols.SoapHeader"类 2.新建Web ...
- WebService之soap类型的服务和rest类型的服务
1.引言 WebService顾名思义就是web服务,web服务主要有两种,一种是基于soap类型的服务,一种是基于rest类型的服务,其中soap类型的服务有两种版本,一种是soap1.1版本,一种 ...
- iOS webservice接口soap协议调用遇到的问题
这是第一次调webservice的接口,并且后台没太做过移动端的接口,所以遇到了很多让人崩溃的困难.吃一堑长一智,所以这种时候懒得写博客的我就要趁着这股热乎劲把这次的过程记录下来啦~ 首先要做的就是, ...
- REST WebService与SOAP WebService的比较
在SOA的基础技术实现方式中WebService占据了很重要的地位,通常我们提到WebService第一想法就是SOAP消息在各种传输协议上交互.近几年REST的思想伴随着SOA逐渐被大家接受,同时各 ...
随机推荐
- 【C++基础】sort函数
sort函数的时间复杂度为O(n*logn),排序方法类似于快排. # 头文件 #include<algorithm> using namespace std; # 参数 第一个参数:要排 ...
- BZOJ3298: [USACO 2011Open]cow checkers(佐威夫博弈)
3298: [USACO 2011Open]cow checkers Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 195 Solved: 96[S ...
- 51Nod 1006:最长公共子序列Lcs(打印LCS)
1006 最长公共子序列Lcs 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). ...
- L3-011 直捣黄龙 (30 分)
本题是一部战争大片 —— 你需要从己方大本营出发,一路攻城略地杀到敌方大本营.首先时间就是生命,所以你必须选择合适的路径,以最快的速度占领敌方大本营.当这样的路径不唯一时,要求选择可以沿途解放最多城镇 ...
- ehci ohci 驱动逻辑
1. EHCI ehci_platform_probe: platform_get_irq usb_hcd_request_irqs usb_hcd_irq 使用的是ehci的irq hcd-> ...
- streamsets origin 说明
origin 是streamsets pipeline的soure 入口,只能应用一个origin 在pipeline中, 对于运行在不同执行模式的pipeline 可以应用不同的origin 独立模 ...
- 首页大屏广告效果 jquery轮播图淡入淡出
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 详解hdparm: linux下的硬盘测速工具
hdparm的功能:显示与设定硬盘的参数.hdparm可检测,显示与设定IDE或SCSI硬盘的参数. 语法: hdparm [-CfghiIqtTvyYZ][-a <快取分区>][-A & ...
- Nagios配置文件说明
Lepus 安装配置:http://www.cnblogs.com/xuanzhi201111/p/5200757.html Nagios 各个目录用途说明如下:bin ...
- linux Posix 信号量 一
信号量是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语. linux提供两种信号量,“内核信号量”和“用户态进程信号量”,“用户态信号量”又分为“Posix”,“System V”信号 ...