soap协议规范
soap以xml形式提供了一个简单.轻量的用于在分散或分布环境中交换结构化与类型信息的机制.soap本身并没有定义任何应用程序语义,如编程模型或特定语义的实现;实际上它通过提供一个有标准组件的包模型与在模块中编码数据的机制,定义了一个简单的表示应用程序语义的机制.这使soap能够被用于从消息传递到rpc的各种系统. 【程序编程相关:非理想主义者的玩物:开源软件离我们多远?】
1. 简介 【推荐阅读:透视Win95的密码档】
1.1 设计目标 【扩展信息:用iis4的慎装补丁ms04-21补丁】
soap包括三个部分 soap封装(见第4节)结构定义了一个整体框架用来表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的. soap编码规则(见第5节)定义了用以交换应用程序定义的数据类型的实例的一系列机制. soap rpc表示(见第7节)定义了一个用来表示远程过程调用与应答的协定.
虽然这三个部分都作为soap的一部分一起描述,但它们在功能上是相交的.特别的,封装与编码规则是在不同的名域中定义的,这种模块性的定义方法增加了简单性在soap封装,soap编码规则与soaprpc协定之外,这个规范还定义了两个协议的绑定,描述了在有或没有http扩展框架[6]的情况下,soap消息如何包含在http消息[5]中被传送.
soap的主要设计目标是简单性与可扩展性,这意味着传统的消息系统与分布对象系统的某些性质不是soap规范的一部分.这些性质包括: 分布式碎片收集 成批传送消息 对象引用(要求分布式碎片收集) 激活机制(要求对象引用)
1.2 符号约定
这篇文章中的关键字 "must", "must not", "required", "shall", "shall not","should", "should not", "recommended", "may", 与"optional"的解释在rfc-2119 [2]中. 这篇文章中用到的名域前缀 "soap-env" 与"soap-enc"分别与"http://schemas.xmlsoap.org/soap/envelope/" 与"http://schemas.xmlsoap.org/soap/encoding/"关联.整篇文档中,名域前缀“xsi”被假定为与uri"http://www.w3.org/1999/xmlschema-instance“(在xmlschema规范[11]定义)相连.类似的,名域前缀”xsd“被假定为与uri"http://www.w3.org/1999/xmlschema"(在[10]中定义)相连.名域前缀”tns“用来表示任意名域.所有其它的名域前缀都只是例子.
名域uri的基本形式”some-uri“表示某些依赖于应用程序或上下文的uri[4].这个规范用扩展bnf(在rfc-2616[5] 描述)描述某些结构.1.3 soap消息举例
在这个例子中,getlasttradeprice soap 请求被发往stockquote服务.这个请求携带一个字符串参数与ticker符号,在soap应答中返回一个浮点数.xml名域用来区分soap标志符与应用程序特定的标志符.这个例子说明了在第6节中定义的http绑定.如果soap中管理xml负载的规则完全独立于http是没有意义的,因为事实上该负载是由http携带的.在appendix a中有更多的例子.
例1 在http请求中嵌入soap消息
post /stockquote http/1.1
host: ... 下一页