加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService之SOAP

发布时间:2020-12-17 02:41:08 所属栏目:安全 来源:网络整理
导读:一、SOAP概述 ??????SOAP(Simple Object Access Protocol),它是一种标准消息传递协议,通常是Web Service的事实标准。SOAP是以XML为基础,SOAP消息格式是由XML Schema模式定义,通过XML命名空间使SOAP具有很强的扩展性。 ????? SOAP message:SOAP XML文

一、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,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错误时,必须使用此代码。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读