SOAP协议应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、SOAP简介
SOAP(SOAP:Simple Object Access Protocol):简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序
SOAP包括的3部分:
soap 封装结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。
SOAP 编码规则定义了用以交换应用程序定义的数据类型的实例的一系列机制。
SOAP RPC 表示定义了一个用来表示远程过程调用和应答的协定。
虽然这三个部分都作为SOAP 的一部分一起描述,但它们在功能上是相交的。特别的,封装和编码规则是在不同的名域中定义的,这种模块性的定义方法增加了简单性在SOAP 封装,SOAP 编码规则和SOAPRPC 协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有HTTP 扩展框架[6]的情况下,SOAP 消息如何包含在HTTP 消息[5]中被传送。
2、SOAP的优势
个人认为,作为新一代的分布式技术,SOAP很大的价值在于它可以很好得解决异构系统之间的连接问题。SOAP是基于XML的一种简单协议,而XML已经成为计算机工业的一个标准。就象一个中国人和一个德国人不太好交流,但是如果双方都会英语的话,那么事情就好办了。XML就是异构系统之间的英语!这就是为什么我们在拥有DCOM,RMI,EJB等众多分布技术后,还需要SOAP的一个原因。在SOAP中,所有的请求和响应都是XML文件格式的,而各种语言的相应开发包都具备把这些请求和响应中包含的数据解析出来并转换成为自己的数据类型,而且这种转化是在暗中进行的,通常是不需要开发者关心的。当然,说回来,SOAP也不是解决这一问题的唯一方案,它的发展还在起步阶段。另外一个常被提到的优点是,SOAP建立在HTTP上进行通信,因此它可以通过绝大部分的防火墙。
3、SOAP基本的语法
SOAP 构建模块
一条SOAP 消息就是一个普通的XML 文档,包含下列元素:
∙必需的Envelope 元素,可把此XML 文档标识为一条SOAP 消息
∙可选的Header 元素,包含头部信息
∙必需的Body 元素,包含所有的调用和响应信息
∙可选的Fault 元素,提供有关在处理此消息所发生错误的信息
所有以上的元素均被声明于针对SOAP 封装的默认命名空间中:
/2001/12/soap-envelope
以及针对SOAP 编码和数据类型的默认命名空间:
/2001/12/soap-encoding
语法规则
这里是一些重要的语法规则:
∙SOAP 消息必须用XML 来编码
∙SOAP 消息必须使用SOAP Envelope 命名空间
∙SOAP 消息必须使用SOAP Encoding 命名空间
∙SOAP 消息不能包含DTD 引用
SOAP 消息不能包含XML 处理指令
1)Envelope元素
必需的SOAP 的Envelope 元素是SOAP 消息的根元素。它可把XML 文档定义为SOAP 消息。
请注意xmlns:soap 命名空间的使用。它的值应当始终是:/2001/12/soap-envelope
SOAP 的encodingStyle 属性用于定义在文档中使用的数据类型。此属性可出现在任何SOAP 元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP 消息没有默认的编码方式。
2)SOAP Header 元素
可选的SOAP Header 元素包含头部信息,如果Header 元素被提供,则它必须是Envelope 元素的第一个子元素。SOAP 在默认的命名空间中("/2001/12/soap-envelope") 定义了三个属性。这三个属性是:actor、mustUnderstand以及encodingStyle。这些被定义在SOAP 头部的属性可定义容器如何对SOAP 消息进行处理。
actor 属性
通过沿着消息路径经过不同的端点,SOAP 消息可从某个发送者传播到某个接收者。并非SOAP 消息的所有部分均打算传送到SOAP 消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。SOAP 的actor 属性可被用于将Header 元素寻址到一个特定的端点。
mustUnderstand 属性
SOAP 的mustUnderstand 属性可用于标识标题项对于要对其进行处理的接收者来说是强制的还是可选的。
假如您向Header 元素的某个子元素添加了"mustUnderstand="1",则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效
3)SOAP Body 元素
必需的SOAP Body 元素可包含打算传送到消息最终端点的实际SOAP 消息。
SOAP Body 元素的直接子元素可以是合格的命名空间。
4)SOAP Fault 元素
可选的SOAP Fault 元素用于存留SOAP 消息的错误和状态信息。
如果已提供了Fault 元素,则它必须是Body 元素的子元素。在一条SOAP 消息中,Fault 元素只能出现一次。SOAP 的Fault 元素用于下列子元素:
在下面定义的faultcode 值必须用于描述故障时的faultcode 元素中:
SOAP消息的基本架构如下所示:
xmlns:soap="/2001/12/soap-envelope"