SOAP 马殿富 北航计算机学院 2006-05
主要内容 <ul><li>SOAP 发展历史 </li></ul><ul><li>SOAP 的主要功能 </li></ul><ul><li>SOAP 协议组成部分 </li></ul><ul><li>信封 </li></ul><ul><li>标...
发展历史  <ul><li>SOAP 最早由 Dave Winner 、 Don Box 和 Bod Atkinson 提出。 </li></ul><ul><li>在 1987 年, Microsoft 开始考虑基于 XML 的分布式计算,其目...
<ul><li>SOAP  为在一个松散的、分布的环境中使用 XML 对等地交换结构化和类型化信息提供了一个简单且轻量级的机制。 </li></ul><ul><li>SOAP1.1 简单对象访问协议 (Simple Object Access ...
SOAP 概述
SOAP 主要功能: <ul><li>定义通信单元的机制: </li></ul><ul><ul><li>一个 SOAP 封套封装了所有其他的信息。 </li></ul></ul><ul><ul><li>一个消息可以有一个消息体,消息体中可以包含...
SOAP <ul><li>基于 XML 的协议,由四部分组成 :  </li></ul><ul><ul><li>信封( Envelope ):定义了一个消息框架,描述消息的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理。  </li><...
SOAP <ul><li>SOAP 信封包装传输的消息。 SOAP 定义 4 个 XML 元素:  </li></ul><ul><ul><li>信封( env:Envelope ) </li></ul></ul><ul><ul><li>标题( ...
命名空间 <ul><li>&quot;  http:// schemas.xmlsoap.org /soap/envelope  &quot; </li></ul><ul><li>&quot;  http://www.w3.org/2001/X...
SOAP 用例 <ul><li><env:Envelope xmlns:env=&quot;http://www.w3.org/2001/06/soap-envelope&quot;>  </li></ul><ul><li><env:Heade...
SOAP 结构  <ul><li>SOAP 消息是由一个 SOAP Envelope 、一个可选的 SOAP Header 和一个 SOAP Body 组成的 XML 文档。 </li></ul><ul><li>元素和属性的命名空间标识是 &q...
SOAP  主要属性  <ul><li>encodingStyle 属性 </li></ul><ul><ul><li>SOAP 的全局 encodingStyle 属性被用于指明在 SOAP 消息中使用哪种编码规则。 </li></ul></u...
SOAP Header  <ul><li>SOAP 提供了一个可伸缩的机制用于在分散的模块化的环境下扩展 SOAP 消息,而通讯双方并不需要有预先的约定知识。典型的扩展例子可以是实现一些诸如认证、事务管理以及支付的 Header 条目。 </l...
SOAP Header <ul><li>描述安全凭证 </li></ul><ul><li>事务 ID </li></ul><ul><li>路由 </li></ul><ul><li>调试信息 </li></ul><ul><li>支付令牌 </li...
actor 属性  <ul><li>SOAP 消息从生成者到达最终接受者,将潜在地沿着消息路径经过一系列的 SOAP 中间结点。 SOAP 中间结点是一个能够接受和转发 SOAP 消息的应用程序。所有的中间结点都如同最终接受者一样由一个 URI...
mustUnderstand 属性  <ul><li>mustUnderstand 全局属性用于指明一个 Header 条目是强制的还是可选的要求接收者处理。 </li></ul><ul><li>Header 条目的接收结点由 SOAP act...
SOAP Body  <ul><li>SOAP Body 元素提供一个简单的用于与消息的最终接收者交换强制信息的机制。而 Body 元素的典型应用包含序列的 RPC 调用和错误报告。 </li></ul><ul><li>Body 元素在编码上作...
SOAP Body <ul><li>Body 条目的编码规则包括 : </li></ul><ul><li>1 .一个 Body 条目由一个完整修饰的元素名来标识,所谓完整修饰的元素名是由一个命名空间 URI 和局部名来组成。 SOAP Body...
SOAP 错误 <ul><li>SOAP Fault 元素是用于在 SOAP 消息中传输错误或状态信息。如果 SOAP 消息需要包含 SOAP Fault 元素的话,它必须作为一个 Body 条目出现,同时在 Body 元素内它必须至多出现一次...
SOAP 错误 <ul><li>若 SOAP Fault 元素中不出现 detail 元素,则表明其中的错误与 Body 元素的处理无关。这可以用于区分在错误情况下 Body 元素是否被 SOAP 的最终接受者处理过。 </li></ul><u...
SOAP 编码  <ul><li>简单类型  </li></ul><ul><li>SOAP 采用了在“ XML Schema Part 2: Datatypes” 的“ Build-in datatypes” 节中定义的所有类型,包括值和词汇空...
SOAP 编码 <ul><li>复合类型 </li></ul><ul><li>SOAP 依照在程序语言中常常看见的以下结构模式来定义复合类型 : </li></ul><ul><li>1 .“ struct” 是一个复合类型值,其成员的存取标识名...
SOAP 中的 RPC  <ul><li>SOAP 的一个设计目标就是要利用 XML 的可扩展性和可伸缩性来包装和交换 RPC 调用。 </li></ul><ul><li>在 RPC 中,使用 HTTP 作为 SOAP 协议绑定媒介的情况下,一...
RPC 和 SOAP Body <ul><li>RPC 调用和响应都是在 SOAP Body 元素中传送,使用如下表示方式 : </li></ul><ul><li>1 .一个方法调用被建模成一个结构 struct 。该方法调用显示为一个简单结构...
SOAP  请求消息 <ul><li><SOAP-ENV:Envelope  xmlns:SOAP-ENV=&quot;http://{soaporg}/envelope/&quot; SOAP-ENV:encodingStyle= &quot...
RPC 和 SOAP Body <ul><li>该方法响应显示为一个简单结构 struct ,包含每个 [out] 或 [in/out] 参数的存取标识。而第一个存取标识是返回值,而随后则是按照原来次序的返回参数。 </li></ul><ul>...
SOAP  响应消息 <ul><li><SOAP-ENV:Envelope  xmlns:SOAP-ENV=&quot;http://{soaporg}/envelope/&quot; SOAP-ENV:encodingStyle= &quot...
HTTP 传输 SOAP  <ul><li>虽然 SOAP 可以和多种 HTTP 请求方法联合使用,但这里的绑定只定义了 SOAP 是如何在 HTTP Post 请求中传输的。 </li></ul><ul><li>1 . HTTP Header...
在 HTTP 中使用 SOAP   <ul><li>SOAP 利用 HTTP 的请求 / 响应消息模型,将 SOAP 请求的参数放在 HTTP 请求里,而将 SOAP 响应的参数放在 HTTP 响应里。 </li></ul><ul><li>SO...
SOAP 工具列表 Endpoint supports SOAP 1.2, see  http:// www.whitemesa.net /  for details.  3.0  White Mesa Server  Bob Cunnings...
SOAP 工具列表 According to the Oracle folks, SOAP should work under the latest production release of Oracle 8i, which is Oracl...
Upcoming SlideShare
Loading in …5
×

Soap

3,194 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,194
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Soap

  1. 1. SOAP 马殿富 北航计算机学院 2006-05
  2. 2. 主要内容 <ul><li>SOAP 发展历史 </li></ul><ul><li>SOAP 的主要功能 </li></ul><ul><li>SOAP 协议组成部分 </li></ul><ul><li>信封 </li></ul><ul><li>标题 </li></ul><ul><li>RPC </li></ul><ul><li>相关应用 </li></ul>
  3. 3. 发展历史 <ul><li>SOAP 最早由 Dave Winner 、 Don Box 和 Bod Atkinson 提出。 </li></ul><ul><li>在 1987 年, Microsoft 开始考虑基于 XML 的分布式计算,其目标是使应用程序能够使用 HTTP 上层的远程过程调用 (RPC) 相互通信。 DevelopMentor 和 Userland 加入到了讨论。 </li></ul><ul><li>在 1998 年初, S0AP 名字就已经被确定。 Userland 在 1998 年发布了一个 XML-RPC 规范。 </li></ul><ul><li>1999 年 9 月 SOAP0.9 提交 IETF 。 </li></ul><ul><li>2000 年 5 月 8 日, SOAP1.1 作为 Note 提交 W3C 。 IBM 发布 Java SOAP 实现,并给开放源代码组织 Apache XML Project 。 Sun 公司将 Web 服务集成到 J2EE 中。 </li></ul><ul><li>2000 年 9 月 13 日, W3C 组建了 XML 协议工作组,专门负责设计 XML 协议,以便成为基于 XML 分布式计算的核心。这个工作组将 SOAP1.1 作为基础,并于 2001 年 7 月 9 日提交了第一份工作组草案 SOAP1.2 。 </li></ul>
  4. 4. <ul><li>SOAP 为在一个松散的、分布的环境中使用 XML 对等地交换结构化和类型化信息提供了一个简单且轻量级的机制。 </li></ul><ul><li>SOAP1.1 简单对象访问协议 (Simple Object Access Propotol) 是 Web 服务的事实标准。 </li></ul><ul><ul><li>支持应用程序与应用程序之间的通信; </li></ul></ul><ul><ul><li>应用于商务对商务的通信以及企业应用集成。 </li></ul></ul><ul><li>以独立于各种编程语言或平台的方式来构造消息、处理消息,从而使用不同编程语言编写的程序之间具有互操作性,并能够在不同的操作系统上运行。 </li></ul><ul><ul><li>通过对模块中特定格式编码的数据的重编码机制来表示应用语义。 </li></ul></ul>
  5. 5. SOAP 概述
  6. 6. SOAP 主要功能: <ul><li>定义通信单元的机制: </li></ul><ul><ul><li>一个 SOAP 封套封装了所有其他的信息。 </li></ul></ul><ul><ul><li>一个消息可以有一个消息体,消息体中可以包含任何 XML 格式文档。 </li></ul></ul><ul><li>错误处理机制: </li></ul><ul><ul><li>标识错误源和导致错误的原因,并允许错误诊断信息在共享者和交互者之间传递。 </li></ul></ul><ul><li>可扩展件机制: </li></ul><ul><ul><li>使用 XML 模式和名字空间技术,灵活扩展元素。 </li></ul></ul><ul><li>灵活的数据表示机制: </li></ul><ul><ul><li>允许交换已经以某种格式序列化的数据,同时也提供了以 XML 格式表示诸如编程语言数据类型这样的抽象数据结构的规则。 </li></ul></ul><ul><li>表示远程过程调用 (RPC) 和作为响应的 SOAP 消息的约定,并且便于映射为过程式编程语言结构。 </li></ul><ul><li>支持以文档为中心的方法。 </li></ul><ul><li>将 SOAP 消息束定到 HTTP 的机制,因为 HTTP 是 Internd 上最常用的通信协议。 </li></ul>
  7. 7. SOAP <ul><li>基于 XML 的协议,由四部分组成 : </li></ul><ul><ul><li>信封( Envelope ):定义了一个消息框架,描述消息的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理。 </li></ul></ul><ul><ul><li>编码规则( Encoding Rules ):用于表示应用程序需要使用的数据类型的实例。 </li></ul></ul><ul><ul><li>绑定( Binding ):定义底层通信协议,进行消息交换。 </li></ul></ul><ul><ul><li>RPC :表示远程过程调用和应答的协定。 </li></ul></ul>
  8. 8. SOAP <ul><li>SOAP 信封包装传输的消息。 SOAP 定义 4 个 XML 元素: </li></ul><ul><ul><li>信封( env:Envelope ) </li></ul></ul><ul><ul><li>标题( env:Header ) </li></ul></ul><ul><ul><li>体( env:Body ) 一组和多组 SOAP 条目的信息。 </li></ul></ul><ul><ul><li>故障( env:Fault ) 协议层错误信息的特殊 SOAP 条目 </li></ul></ul>
  9. 9. 命名空间 <ul><li>&quot; http:// schemas.xmlsoap.org /soap/envelope &quot; </li></ul><ul><li>&quot; http://www.w3.org/2001/XML.Schema-instance &quot; </li></ul><ul><li>&quot; http:// www.w3.org/2001/XML.Schema &quot; </li></ul><ul><li>&quot; http:// schemas.xmlsoap.org /soap/enc oding &quot; </li></ul><ul><li>&quot; http:// schemas.xmlsoap.org/ wsdl/&quot; </li></ul><ul><li>&quot; http:// schemas.xmlsoap.org/ wsdl/soap &quot; </li></ul><ul><li>&quot; http://ws-i.org/schema/conformanceClain&quot; </li></ul>
  10. 10. SOAP 用例 <ul><li><env:Envelope xmlns:env=&quot;http://www.w3.org/2001/06/soap-envelope&quot;> </li></ul><ul><li><env:Header>    </li></ul><ul><li><n:alertcontrol xmlns:n=&quot;http://example.org/alertcontrol&quot;> </li></ul><ul><li><n:priority>1</n:priority> </li></ul><ul><li><n:expires>2001-06-22T14:00:00-05:00</n:expires>   </li></ul><ul><li>  </n:alertcontrol> </li></ul><ul><li></env:Header>   </li></ul><ul><li><env:Body>   </li></ul><ul><li>  <m:alert xmlns:m=&quot;http://example.org/alert&quot;> </li></ul><ul><li><m:msg>Pick up Mary at school at 2pm</m:msg>    </li></ul><ul><li></m:alert> </li></ul><ul><li></env:Body> </li></ul><ul><li></env:Envelope> </li></ul>Message Envelope
  11. 11. SOAP 结构 <ul><li>SOAP 消息是由一个 SOAP Envelope 、一个可选的 SOAP Header 和一个 SOAP Body 组成的 XML 文档。 </li></ul><ul><li>元素和属性的命名空间标识是 &quot;http://www.w3.org/2001/06/soap-envelope&quot; 。 SOAP 消息应当包含如下部分: </li></ul><ul><li>一个 SOAP envelope 。 </li></ul><ul><ul><li>Envelope 是表示该消息的 XML 文档的根级元素。 </li></ul></ul><ul><li>一个 SOAP Header 。 </li></ul><ul><ul><li>Header 是为了支持在松散环境下在通讯方之间尚未预先达成一致的情况下为 SOAP 消息增加特性的通用机制。 </li></ul></ul><ul><ul><li>SOAP 定义了很少的一些属性来用于指明谁可以处理该特性以及它是可选的还是强制的。 </li></ul></ul><ul><li>一个 SOAP Body 。 </li></ul><ul><ul><li>Body 为该消息的最终接收者所想要得到的信息提供了一个容器。此外, SOAP 定义了 Body 的一个子元素 Fault 用于报告错误。 </li></ul></ul>
  12. 12. SOAP 主要属性 <ul><li>encodingStyle 属性 </li></ul><ul><ul><li>SOAP 的全局 encodingStyle 属性被用于指明在 SOAP 消息中使用哪种编码规则。 </li></ul></ul><ul><ul><li>该属性可以在任意元素中出现,其作用范围包括该元素的内容和所有其子元素中未使用该属性的所有子元素。 </li></ul></ul><ul><li>root 属性 </li></ul><ul><ul><li>可以被用来标注编序的根,根一般就有值“ 1” 。那些非真正根的编序根也可以被标注为赋予值为“ 1” 的编序根。一个元素也可以被明确地标注为赋予值为“ 0” 的非编序根。 </li></ul></ul><ul><ul><li>SOAP 根属性可以出现在 SOAP Header 和 SOAP Body 元素中的任何子元素里,该属性没有默认值。 </li></ul></ul>
  13. 13. SOAP Header <ul><li>SOAP 提供了一个可伸缩的机制用于在分散的模块化的环境下扩展 SOAP 消息,而通讯双方并不需要有预先的约定知识。典型的扩展例子可以是实现一些诸如认证、事务管理以及支付的 Header 条目。 </li></ul><ul><li>Header 元素应当被编码为 SOAP Envelope XML 文档的第一直接子元素。 Header 的所有直接子元素都被称为 Header 条目。 </li></ul><ul><li>Header 条目的编码规则包括 : </li></ul><ul><ul><li>一个 SOAP Header 条目由一个完整修饰的元素名来标识,所谓完整修饰的元素名是由一个命名空间 URI 和局部名来组成。 </li></ul></ul><ul><ul><li>SOAP Header 元素的所有直接子元素都必须是完整修饰的。 </li></ul></ul><ul><li>encodingStyle 属性可以用于指明 Header 条目的编码风格。 </li></ul><ul><li>actor 属性和 SOAP mustUnderstand 属性可以用于指明由哪个 SOAP 结点来处理条目以及如何处理条目。 </li></ul>
  14. 14. SOAP Header <ul><li>描述安全凭证 </li></ul><ul><li>事务 ID </li></ul><ul><li>路由 </li></ul><ul><li>调试信息 </li></ul><ul><li>支付令牌 </li></ul><ul><li>…… </li></ul>
  15. 15. actor 属性 <ul><li>SOAP 消息从生成者到达最终接受者,将潜在地沿着消息路径经过一系列的 SOAP 中间结点。 SOAP 中间结点是一个能够接受和转发 SOAP 消息的应用程序。所有的中间结点都如同最终接受者一样由一个 URI 来标识。 </li></ul><ul><li>actor 属性用一个 RUI 标识节点处理对应的文件头时必须扮演的角色。当一个节点接收到一个 SOAP 消息时,它要分析文件头,以确定哪些代码块是由该节点支持的角色。 </li></ul><ul><li>Header 元素中接收者角色类似和约的接受者。一个接收者接到其想要的一个 Header 元素必须不转发该 Header 给 SOAP 消息路径中的下一个应用程序。 </li></ul><ul><li>SOAP actor 全局属性可以被用于指明 Header 元素的接收者。而 SOAP actor 属性的值是一个 URI 。这个特别的 URI&quot;http://www.w3.org/2001/06/soap-envelope/actor/next&quot; 指明该 Header 元素是直接的下一个进行消息处理的 SOAP 应用程序想要的。这与 HTTP 的连接头字段的 hop-by-hop scope model 的表示。 </li></ul><ul><li>若省略 SOAP actor 属性,则表明接收者是 SOAP 消息的最终接收者。 </li></ul>
  16. 16. mustUnderstand 属性 <ul><li>mustUnderstand 全局属性用于指明一个 Header 条目是强制的还是可选的要求接收者处理。 </li></ul><ul><li>Header 条目的接收结点由 SOAP actor 属性来定义。 mustUnderstand 属性的值可为“ 0” 或“ 1” 。若没有使用 SOAP mustUnderstand 属性,则在语义上等价于 mustUderstand 属性出现同时取值为“ 0” 。 </li></ul><ul><li>若 Header 条目带有值为“ 1” 的 mustUnderstand 属性,则该 Header 条目的接收结点要么必须遵循语义并正确地处理这些语义,要么必须宣称处理消息失败。 </li></ul><ul><li>mustUnderstand 属性是为了考虑健壮地升级而设置的。所有用值为“ 1” 的 SOAP mustUnderstand 属性来标记的元素必须被认为是可以影响该元素的上级元素或同级元素的语义。 </li></ul>
  17. 17. SOAP Body <ul><li>SOAP Body 元素提供一个简单的用于与消息的最终接收者交换强制信息的机制。而 Body 元素的典型应用包含序列的 RPC 调用和错误报告。 </li></ul><ul><li>Body 元素在编码上作为 SOAP Envelope 元素的一个直接子元素。如果包含 Header 元素,则 Body 元素必须直接跟随 Header 元素,否则 Body 元素必须是 Envelope 元素的第一直接子元素。 </li></ul><ul><li>所有 Body 元素的直接子元素被成为 SOAP Body 条目,同时每一个 Body 条目都应当编码为 SOAP Body 元素里的一个独立元素。 </li></ul>
  18. 18. SOAP Body <ul><li>Body 条目的编码规则包括 : </li></ul><ul><li>1 .一个 Body 条目由一个完整修饰的元素名来标识,所谓完整修饰的元素名是由一个命名空间 URI 和局部名来组成。 SOAP Body 元素的直接子元素可以是命名空间修饰的。 </li></ul><ul><li>2 . SOAP encodingStyle 属性可以被用来表明 Body 条目中使用的编码规则。 </li></ul><ul><li>3 . SOAP 定义了一个 Body 条目,用于报告错误的 Fault 条目。 </li></ul>
  19. 19. SOAP 错误 <ul><li>SOAP Fault 元素是用于在 SOAP 消息中传输错误或状态信息。如果 SOAP 消息需要包含 SOAP Fault 元素的话,它必须作为一个 Body 条目出现,同时在 Body 元素内它必须至多出现一次。 </li></ul><ul><li>SOAP Fault 元素定义了如下子元素 : </li></ul><ul><li>1 . faultcode 元素 是应那些要提供一个算法上的机制来标识错误的软件的需要。 faultcode 必须在 SOAP Fault 元素中出现。 SOAP 定义了一个很小的 SOAP 错误代码的集合用于覆盖基本的 SOAP 错误。 </li></ul><ul><li>2 . faultstring 元素 是为那些错误代码提供一个人可以读懂的错误解释,它不是为程序处理而设,提供一些解释该错误种类的信息。 </li></ul><ul><li>3 . faultactor 元素 是为在 SOAP 消息路径中是谁引起了该错误的发生这一情况描述信息。 faultactor 属性的值是一个标识该源的一个 URI 。所谓并非作为 SOAP 消息最终接收者的应用程序必须在 SOAP Fault 元素中包含 faultactor 元素。而消息的最终接收者可以使用 faultactor 元素来明确地指明是它生成了该错误。 </li></ul><ul><li>4 . detail 元素 是用于传输与 SOAP Body 元素相关的应用程序特别的错误信息。如果 Body 元素中的内容不能被成功地处理的时候,它必须出现。它必须不能被用于传输属于 Header 条目的错误信息。 </li></ul>
  20. 20. SOAP 错误 <ul><li>若 SOAP Fault 元素中不出现 detail 元素,则表明其中的错误与 Body 元素的处理无关。这可以用于区分在错误情况下 Body 元素是否被 SOAP 的最终接受者处理过。 </li></ul><ul><li>detail 元素的所有直接子元素都被称为 detail 条目,同时每个 detail 条目都作为 detail 元素中的一个独立的元素进行编码。 </li></ul><ul><li>detail 条目的编码规则如下: </li></ul><ul><li>1 .一个 detail 条目由一个完整修饰的元素名来标识。 detail 元素的直接子元素可以是命名空间修饰的。 </li></ul><ul><li>2 . SOAP encodingStyle 属性可以被用来表明 detail 条目中使用的编码规则。 </li></ul>
  21. 21. SOAP 编码 <ul><li>简单类型 </li></ul><ul><li>SOAP 采用了在“ XML Schema Part 2: Datatypes” 的“ Build-in datatypes” 节中定义的所有类型,包括值和词汇空间 (lexical spaces) </li></ul><ul><li>1 .字符串:“ string” 数据类型在“ XML Schema Part 2: Datatypes” 中被定义。 </li></ul><ul><li>2 .枚举:“ XML Schema Part 2: Datatypes” 规范定义了一种称为“玫举 (enumeration)” 的机制。 </li></ul><ul><li>3 .字节数组:一个 Byte 数组可以编码为单引用或多引用值。对一个不透明的 Byte 数组的推荐表示是使用在 XML Schema 规范中定义的“ base64 ” 编码方式 。 </li></ul><ul><li>4 .多态存取标识:多态地访问数个类型的值,在运行时刻每个类型都是可使用的。一个多态存取标识实例必须包含一个“ xsi:type” 属性以描述类型的实际值。 </li></ul>
  22. 22. SOAP 编码 <ul><li>复合类型 </li></ul><ul><li>SOAP 依照在程序语言中常常看见的以下结构模式来定义复合类型 : </li></ul><ul><li>1 .“ struct” 是一个复合类型值,其成员的存取标识名是相互区别的唯一标志,应彼此各不相同。 </li></ul><ul><li>2 .“ array” 是一个复合类型值,其成员的顺序位置是相互区别的唯一标志。 </li></ul>
  23. 23. SOAP 中的 RPC <ul><li>SOAP 的一个设计目标就是要利用 XML 的可扩展性和可伸缩性来包装和交换 RPC 调用。 </li></ul><ul><li>在 RPC 中,使用 HTTP 作为 SOAP 协议绑定媒介的情况下,一个 RPC 调用可以很自然地映射到一个 HTTP 请求,而 RPC 响应则可以映射到 HTTP 响应。使用 SOAP 方式的 RPC 并不限于 HTTP 协议绑定。 </li></ul><ul><li>为实施一个方法调用,需要以下信息 : </li></ul><ul><li>1 .目标 SOAP 结点的 URI </li></ul><ul><li>2 .方法名 </li></ul><ul><li>3 .可选的方法或过程的特征 </li></ul><ul><li>4 .方法或过程的参数 </li></ul><ul><li>5 .可选的头数据 </li></ul><ul><li>SOAP 依赖协议绑定来提供传送 URI 的机制。 </li></ul>
  24. 24. RPC 和 SOAP Body <ul><li>RPC 调用和响应都是在 SOAP Body 元素中传送,使用如下表示方式 : </li></ul><ul><li>1 .一个方法调用被建模成一个结构 struct 。该方法调用显示为一个简单结构 struct ,包含每个 [in] 或 [in/out] 参数的存取标识。该结构的名和类型可使用过程或方法的名来标识。 </li></ul><ul><li>2 .每个 [in] 或 [in/out] 参数都被表示为一个存取标识,该存取标识的名和类型都对应于相应参数的名和类型。他们的次序也是按照原来 RPC 中的次序。 </li></ul><ul><li>3 .一个方法响应被建模成一个结构 struct 。 </li></ul>
  25. 25. SOAP 请求消息 <ul><li><SOAP-ENV:Envelope xmlns:SOAP-ENV=&quot;http://{soaporg}/envelope/&quot; SOAP-ENV:encodingStyle= &quot;http://{soaporg}/encoding/&quot;> </li></ul><ul><li><SOAP-ENV:Body> </li></ul><ul><li><m:QuotePrice xmlns:m=&quot;Some-URI&quot;> </li></ul><ul><li><commodity>Computer</commodity> </li></ul><ul><li></m:QuotePrice> </li></ul><ul><li></SOAP-ENV:Body> </li></ul><ul><li></SOAP-ENV:Envelope> </li></ul>
  26. 26. RPC 和 SOAP Body <ul><li>该方法响应显示为一个简单结构 struct ,包含每个 [out] 或 [in/out] 参数的存取标识。而第一个存取标识是返回值,而随后则是按照原来次序的返回参数。 </li></ul><ul><li>每个 [out] 或 [in/out] 参数都被表示为一个存取标识,该存取标识的名和类型都对应于相应参数的名和类型。返回值的存取标识名并没有多少语义。同样的,结构的名也并没有多少语义。当然,无论如何,在添加了“ Response” 字串的方法名后,要有一个约定来命名它。 </li></ul><ul><li>方法调用出错应使用 SOAP Fault 元素来编码。如果一个绑定协议对于错误表达还有额外规则,那么这些规则都应当被遵守。 </li></ul><ul><li>方法和响应的结构可以使用规则来编码,也可以使用在 encodingStyle 属性中描述的其他编码。 </li></ul><ul><li>应用程序可以处理漏写参数的请求不过也可以返回一个错误。 </li></ul><ul><li>因为在响应中若包含“ result” 则表明成功,若包含“ fault” 则表明失败,所以如果方法响应中同时包含了“ result” 和“ fault” 则是错误的。 </li></ul>
  27. 27. SOAP 响应消息 <ul><li><SOAP-ENV:Envelope xmlns:SOAP-ENV=&quot;http://{soaporg}/envelope/&quot; SOAP-ENV:encodingStyle= &quot;http://{soaporg}/encoding/&quot;> </li></ul><ul><li><SOAP-ENV:Body> </li></ul><ul><li><m:QuotePriceResponse xmlns:m=&quot;Some-URI&quot;> </li></ul><ul><li><Price> ¥ 8000.00</Price> </li></ul><ul><li></m:QuoteStockPriceResponse> </li></ul><ul><li></SOAP-ENV:Body> </li></ul><ul><li></SOAP-ENV:Envelope> </li></ul>
  28. 28. HTTP 传输 SOAP <ul><li>虽然 SOAP 可以和多种 HTTP 请求方法联合使用,但这里的绑定只定义了 SOAP 是如何在 HTTP Post 请求中传输的。 </li></ul><ul><li>1 . HTTP Header 中的 SOAPAction 字段: SOAPAction HTTP 请求头字段 (header field) 可以用于指示 SOAP HTTP 请求的目的。它的值是一个标识该目的的 URI 。 </li></ul><ul><li>2 . SOAP HTTP 响应:在 HTTP 之上的 SOAP 遵从用于在 HTTP 中表示通讯状态的 HTTP 状态代码的语义。例如, 2xx 状态代码表明这是客户端包含 SOAP 构件的请求被成功的接收、理解和接受等等。 </li></ul><ul><li>3 .当处理请求的时候发生 SOAP 错误的时候, SOAP HTTP 服务器必须发出一个 HTTP 500 “Internal Server Error” 响应同时在包含于该响应的 SOAP 消息中应包含一个 SOAP Fault 元素。 </li></ul><ul><li>4 . HTTP 扩展框架: SOAP 消息可以与 HTTP Extension Framework 一起使用来标识 SOAP HTTP 请求。 </li></ul>
  29. 29. 在 HTTP 中使用 SOAP <ul><li>SOAP 利用 HTTP 的请求 / 响应消息模型,将 SOAP 请求的参数放在 HTTP 请求里,而将 SOAP 响应的参数放在 HTTP 响应里。 </li></ul><ul><li>SOAPAction HTTP 请求头字段 (header field) 可以用于指示 SOAP HTTP 请求的目的。它的值是一个标识该目的的 URI 。 </li></ul><ul><ul><li>POST /StockQuote HTTP/1.1 </li></ul></ul><ul><ul><li>Content-Type: text/xml; charset=&quot;utf-8&quot; </li></ul></ul><ul><ul><li>Content-Length: nnnn </li></ul></ul><ul><ul><li>SOAPAction: &quot;http://electrocommerce.org/abc#MyMessage&quot; </li></ul></ul><ul><ul><li><env:Envelope xmlns:env=&quot;http://www.w3.org/2001/06/soap-envelope&quot; > </li></ul></ul><ul><ul><li>. . . </li></ul></ul><ul><ul><li></env:Envelope> </li></ul></ul><ul><li>在 HTTP 之上的 SOAP 遵从用于在 HTTP 中表示通讯状态的 HTTP 状态代码的语义。 </li></ul><ul><ul><li>HTTP/1.1 200 OK </li></ul></ul><ul><ul><li>Content-Type: text/xml; charset=&quot;utf-8&quot; </li></ul></ul><ul><ul><li>Content-Length: nnnn </li></ul></ul><ul><ul><li><env:Envelope xmlns:env=&quot;http://www.w3.org/2001/06/soap-envelope&quot; > </li></ul></ul><ul><ul><li>. . . </li></ul></ul><ul><ul><li></env:Envelope> </li></ul></ul>
  30. 30. SOAP 工具列表 Endpoint supports SOAP 1.2, see http:// www.whitemesa.net / for details. 3.0 White Mesa Server Bob Cunnings White Mesa TIBCO's SOAP 1.2 endpoint is available at http:// webservice.tibco.com/interop 2.0 Web Services SDK Don Mullen TIBCO WASP 4.5 supports most features of the June 2002 Last Call draft of SOAP 1.2. Endpoint is available, see http:// soap.systinet.net/interop / for more information. 4.0 WASP Server for Java Jacek Kopecky Systinet Limited support for SOAP 1.2. Plan to support most of the spec before March 2003. 0.55 and later SOAP::Lite Paul Kulchenko SOAPLite In order to help meeting the W3C implementation requirements, Microsoft will provide a public endpoint that can accept incoming SOAP 1.2 messages and be able to generate SOAP 1.2 messages and send them to other SOAP 1.2 endpoints. Endpoint is at http:// mssoapinterop.org/asmx / (Contacts: Alex DeJarnatt < [email_address] > and John Koropchak < [email_address] >). BizTalk Henrik Frystyk Nielsen Microsoft BEA provides a soap 1.2 endpoint at http://webservice.bea.com:9001/index.html . Endpoint contact is Manoj Cheenath . 8.0 and later WebLogic Server David Orchard BEA Limited support for June SOAP 1.2 spec in Beta 1, and for the December SOAP 1.2 spec in the current CVS implementation. Don't yet fully support new encoding or all faults, but we plan to be fully compliant soon, tracking the spec into future releases. Beta 1 and after Axis Glen Daniels Apache Spec Version/Comment Implementation Version Implementation Name Reporting Company/ Organization
  31. 31. SOAP 工具列表 According to the Oracle folks, SOAP should work under the latest production release of Oracle 8i, which is Oracle 8.1.7. Earlier releases of Oracle 8i (e.g 8.1.6) seem to be more awkward: the JVM bundled with 8.1.6 has a bug that affects Xerces. See here for more information: http:// marc.theaimsgroup.com/?l =soap-user&m=98200304522497&w=2 8i Oracle Oracle Apache SOAP has worked under every version of WebSphere from 1.1 to 3.02. It will work out of the box on WebSphere 3.5 with fixpak 2 applied. Wouter Cloetens has provided instructions on using Apache-SOAP with IBM Websphere v1, v2, and v3.0 on http:// workspot.net /~zombie/soap/ . There are also instructions for WebSphere v3.5 in the Apache-SOAP distribution - see http://xml.apache.org/websrc/cvsweb.cgi/~checkout~/xml-soap/java/docs/install/websphere.html?rev =1.1&content-type=text/html&only_with_tag=MAIN . Be sure to check the following items: 1. Explicitly set the port number that you have exposed the rpcrouter servlet on. Even if it is default(80), just mention it in the URL as http:// aaa.bbb.ccc.ddd:port/soap/servlet/rpcrouter . 2. Verify that xerces is at the start of your path not only by setting it in the App but also in the websphere configuration files (admin.config, setupclient.bat). 5.0 or later Websphere IBM Spec Version/Comment Implementation Version Implementation Name Company/ Organization

×