SOAP 【Simple Object Access Protocol】
为什么需要SOAP
-
需求:
- 广泛的兼容能力,可以支持不同的系统平台、数据格式和多种连接方式
- 在Internet 环境下,实现系统是松散耦合的、跨平台的,与语言无关的,与特定接口无关的, 而且要提供对Web 应用程序的可靠访问
- 各种系统间的互操作性就愈显得必要,要求系统能够无缝地进行通信和共享数据
- 实现“基于WEB无缝集成”
-
SOAP在WEB服务堆栈中作为用于 XML 消息传递的一种非常普遍的协议,发挥着十分重要的作用
什么是SOAP
-
SOAP(Simple Object Access Protocol ) 简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议
-
包括四个部分
- SOAP封装(envelop)
- SOAP编码规则(encoding rules)
- SOAP RPC表示(RPC representation)
- SOAP绑定(binding)
-
SOAP信封(envelop)
- 它构造定义了一个整体的 表示框架,可用于表示在消息 (message) 中的内容是什么,谁应当处理它,以及这是可选还是强制的。
-
SOAP编码规则(encoding rules)
- 定义了一个 编序机制用于交换应用程序定义的数据类型的实例
-
SOAP RPC表示(RPC representation)
- 定义了 一个用于表示远端过程调用和响应的约定
-
SOAP绑定(binding)
- 定义了一个使用底层传输协议来完成在结点间交换
- SOAP 信封的约定。
-
这四部分在功能上是正交的。特别的,信封和编码规则是被定义在不同的命名空间 (namespace)中
-
例一:阐明SOAP中一个简单的通信信息
-
例二:SOAP通信与底层的不同协议和不同的交换格式有关
-
例三: StockQuote SOAP服务信息
SOAP消息结构
SOAP消息示例
SOAP与CORBA、COM/DCOM的区别
- CORBA(Common Object Request Broker Architecture)公共对象请求代理体系结构是由OMG组织制订的一种标准的面向对象应用程序体系规范。
- 其核心部分是对象请求代理ORB(Object Request Broker)
- ORB可看作是在对象之间建立客户/服务关系的一种中间件
- COM/DCOM(Component Object Model / Distributed Component Object Model )是微软公司提出的分布式组件对象模型标准, 支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯
一个典型 SOAP 通信体系结构的组件
- SOAP不会取代CORBA、COM/DCOM,三者的概念有所区别。
- CORBA应用程序和DCOM应用程序不能实现互操作,两者不能在一起协作。
- SOAP并没有定义信息的语义、服务质量、基于INTERNET的事务处理。
- 尽管CORBA可以在不同的平台上执行,DCOM可以在微软的各种平台上运行,但是基于CORBA和DCOM的解决方案必须依赖于单一的应用程序。
- SOAP没有定义分布式系统的所有元素,SOAP没有提供分布式类库,类型安全检查,版本控制等等。
基本概念
- 协议
- SOAP
- SOAP绑定
- SOAP结点
- 数据封装
- SOAP消息
- SOAP信封
- SOAP条目
- SOAP Header
- SOAP Body
- SOAP Fault
- SOAP数据模型
- SOAP数据编码
- 消息接收和发送
- SOAP发送者
- SOAP接收者
- SOAP消息路径
- 初始SOAP发送者
- SOAP中介结点
- 最终SOAP接收者
- SOAP应用
消息交换模型
- 处理步骤
- 找到并标识该SOAP消息中所有需要该应用程序理解的那部分内容
- 检验在第一步中获得的被标识的部分内容,分析出其中所有必须强制处理的部分,并处理这些内容
- 如果该SOAP应用程序不是该消息的最终目的地,则需要在该消息中删除所有在第一步中标识的部分,如果有必要,附加上这一轮处理的结果部分,并转发该消息
SOAP消息结构
- SOAP消息是一个由单个文档元素构成的XML信息集,这个文档元素信息项的描述如下:
- 文档元素信息项具备以下内容:
- 一个局部名Envolope
- 一个命名空间名:http://www.w3.org/2001/12/soap- envolope
- 零个或多个带命名空间修饰的属性信息项
- 一个或两个元素信息项:
- 一个可选的元素信息项Header
- 一个强制的元素信息项Body
SOAP示例
- soapUI
- FishinHole.com(SOAP+Ajax)