理解SOAP (一)介绍、SOAP 版本、
发表于:2007-06-30来源:作者:点击数:
标签:
适用于:全局XML Web 服务架构(GXA) 远程过程调用(RPC) SOAP 1.1 SOAP 1.2 规范 传输协议:TCP, HTTP, SMTP, 和 MSMQ Microsoftreg; .NET Web Services Enhancements 1.0 SP1 XML Schema 摘要 SOAP在分布异构环境中提供一种简单,可扩展,和丰富的XML消息框
适用于:全局XML Web 服务架构(GXA)
远程过程调用(RPC)
SOAP 1.1 SOAP 1.2 规范
传输协议:TCP, HTTP, SMTP, 和 MSMQ
Microsoft® .NET Web Services Enhancements 1.0 SP1
XML Schema
摘要
SOAP在分布异构环境中提供一种简单,可扩展,和丰富的XML消息框架(messaging framework), 对定义高层的应用协议提供更强的互操作性(interoperability).
内容
介绍
SOAP 版本
消息框架
扩展性
处理模型
协议绑定
HTTP 绑定
RPC 与编码
SOAP 样式
总结
介绍
在昨天SOAP好像只不过是一种清洁产品。现在大多数
开发者无法理解没有尖括号的信息(can@#t hear the word without seeing angle brackets.译注:我理解成现在数据大多以XML表现)。SOAP最初代表" 简单对象访问协议"。如果你几年以前问人询问SOAP的意思,他们会或许说“在inte
.net上与DCOM 和 Corba (如 RPC 调用)做类似工作”。它的原作者们承认他们集中于“对象访问”然后返回,随着时间发展,使SOAP服务于更广泛的应用变得合乎需要。因此,规范的焦点迅速从对象移向通用XML消息框架。
焦点的变化在缩写词SOAP的字母’O’上产生了一个细微的问题。有趣的是,SOAP1.2工作组仍保留(迄今) SOAP这个名字(它太应用的太普遍,很难改变它), 但是决定依靠(against)清楚地说明来避免误解开发者。最新的SOAP1.2规范中正式的SOAP定义,甚至没有涉及对象:
SOAP是一种在分散,分布环境中用来交换结构化信息的轻量级协议。SOAP使用XML 技术来定义一个可扩展的消息框架,这个消息框架提供了一个能在多种下层(underlying)协议上进行交换的消息构造。框架被设计成独立于任何特定的编程模型和其他实现的具体语义。
现在,这个定义真正的描叙了SOAP的实质。SOAP定义了一个方法来将XML消息从A点传送到B点(见图1)。这是靠SOAP提供了一个基于XML的消息框架,它有以下几个特点:
① 可扩展(extensible)
② 能使用多种下层
网络协议
③ 独立于编程模型
现在来依次讨论这三个特点的更多细节。
图1.简单SOAP消息
首先,SOAP的关键是可扩展性(extensibility)。当SOAP代表一些东西的时候,“S”意为“简单(Simple)”。如果有一件事我们能从web上学到,那就是简单(Simplicity)总能争取(wins over)效率或工业纯度(technical purity)。而且当互操作性处于得失攸关(at stake)时,简单就是绝对的需要。SOAP缺乏多种分布式系统的特点,如
安全、路径选择和命名一些
可靠性,印证了SOAP保持了最初设计目标――简单。SOAP定义了一个通信框架来允许这些特点作为分层扩展加进来(to be added down the road as layered extensions)。Microsoft 、IBM 和其他软件商正积极着手于一套通用的SOAP扩展, 它将增加大多数开发者期望的一些特点。初始阶段作为全局XML Web 服务架构(GXA)而涉及。Microsoft已经发布一个GXA规范的参考实现, 并称为Microsoft® .NET Web Services Enhancements 1.0 SP1。
其次,SOAP能够基于任何传送协议使用,例如TCP,HTTP,SMTP甚至MSMQ(参阅图1)。不过,为了保持互操作性需要定义标准协议绑定来略述(outline)适合每个环境的规定(rule)。SOAP规范提供一个灵活的框架来定义任意的协议绑定,而且,因为HTTP协议已被广泛使用,现在已经明确定义了一个HTTP协议的绑定。
第三,SOAP允许任何编程模型并且并不依赖RPC。实际上,大多数开发者直接将SOAP等同于在分布式对象上使用RPC调用(因为最初SOAP是关于“访问对象”),基本的SOAP模型象MSMQ一样更近似于传统消息系统。SOAP定义了一个单独处理的单向消息模型。你可以将多条消息合并成一个整体信息进行交换。图1 说明了一条简单的发送者接收不到response的单向消息,不过,接收者可以把response发回给发送人(参阅图2)。SOAP允许任意数量的消息交换模式(message exchange patterns -MEPs), 每个消息交换模式的request/response仅仅只有一个。其他例子包括solicit/reponse( 和request/reponse相反),通知,和长时间运行的点对点会话(peer-to-peer conversations)。
图2. Request/response 消息交换模式
开发者经常将request/response与RPC相混淆,而实际上它们非常不同。RPC使用请求/反应,但是请求/反应不一定是RPC必需的。RPC是允许开发者与方法调用合作的一种编程模型。RPC需要一个方法签名到SOAP消息的转换。由于RPC的普及性,SOAP略述了一个以SOAP来使用RPC的协定(见下文的RPC 和编码这一部分)。
有了这三大特征,SOAP消息框架就能在异构的环境中方便的发送XML消息了,而互操作性在这些异构的环境中早就是一个挑战了。
SOAP 版本
从最初发布SOAP规范对今天的广泛实现的SOAP1.1,很多东西已经改变,从小的细节到主要的思想变化。SOAP1.1被提交到W3C,并在2000年5月返回作为备忘录(note)发布。 "W3C 备忘录(Note)"状态使得 SOAP 1.1 仅仅是一个好的想法,因为它还没有通过W3C的严格程序,在这个程序中它会最终达到实现的“建议书(Recommendation)”状态 。虽然如此,现在在如此广泛的大或小的应用提供商支持下,SOAP1.1仍然被认为为实际上的标准。
W3C使用SOAP1.1建议书作为原本(seed)来让一个新的XML 协议工作组负责生成下一个SOAP版本, 目前命名为SOAP1.2。在目前,SOAP1.2是"候选建议书",这表明它在实现阶段内而且离完成不远。 一旦SOAP1.2 成为"建议书" ,它可能会迅速得到应用提供商的支持。
在SOAP1.2 实现之后,应用提供商会为向后兼容而继续支持SOAP1.1。SOAP版本化(versioning)是基于XML 命名空间。SOAP 1.1对应于http://schemas.xmlsoap.org/soap/envelope 命名空间,而SOAP 1.2对应于http://www.w3.org/2002/12/soap-envelope 命名空间(尽管在它成为建议书时会有改变)。
参阅表格1来快速参考每个命名空间的名字和规范的位置。在整个余下的文章中,我们将覆盖SOAP中最重要的地方。在两个版本的广泛的变更列表中检查当前的SOAP 1.2规范。
表1.SOAP版本信息
SOAP 1.1
命名空间名字
http://schemas.xmlsoap.org/soap/envelope/
规范位置
http://www.w3.org/TR/SOAP/
SOAP 1.2
命名空间名字
http://www.w3.org/2002/12/soap-envelope
规范位置
http://www.w3.org/TR/soap12-part0/ (原始)
http://www.w3.org/TR/soap12-part1/
http://www.w3.org/TR/soap12-part2/
原文转自:http://www.ltesting.net