SOAP

来自站长百科
跳转至: 导航、​ 搜索

SOAP是简单对象访问协议,是一种轻量的、简单的、基于XML的协议,它被设计成在WEB上交换结构化的和固化的信息,SOAP可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议HTTP,简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME),它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。

SOAP包括的四个部分[ ]

  1. SOAP封装:它定义了一个框架, 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。
  2. SOAP编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。
  3. SOAP RPC表示:它定义了用于表示远程过程调用和应答的协定。
  4. SOAP绑定:定义了一种使用底层传输协议来完成在节点间交换SOAP封装的约定。
  • SOAP消息基本上是从发送端到接收端的单向传输,但它们常常结合起来执行类似于请求/应答的模式,所有的SOAP消息都使用XML编码。一条SOAP消息就是一个包含有一个必需的SOAP的封装包,一个可选的SOAP标头和一个必需的SOAP体块的XML文档。
  • 把SOAP绑定到HTTP提供了同时利用SOAP的样式和分散的灵活性的特点以及HTTP的丰富的特征库的优点,在HTTP上传送SOAP并不是说SOAP会覆盖现有的HTTP语义,而是HTTP上的SOAP语义会自然的映射到HTTP语义,在使用HTTP作为协议绑定的场合中, RPC请求映射到HTTP请求上,而RPC应答映射到HTTP应答,然而在RPC上使用SOAP并不仅限于HTTP协议绑定。

协议结构

SOAP消息格式[ ]

  • SOAP 标头
  • <SOAP-ENV: Envelope
  • Attributes>
  • <SOAP-ENV:Body
  • Attributes>
  • </SOAP-ENV:Body>

SOAP语法规则[ ]

这里是一些重要的语法规则:

SOAP 消息必须用 XML 来编码

SOAP 消息必须使用 SOAP Envelope 命名空间

SOAP 消息必须使用 SOAP Encoding 命名空间

SOAP 消息不能包含 DTD 引用

SOAP 消息不能包含 XML 处理指令

SOAP 核心技术[ ]

  • SOAP采用了已经广泛使用的两个协议:HTTP和XML,HTTP用于实现 SOAP的RPC风格的传输, 而XML是它的编码模式,采用几行代码和一个XML解析器, HTTP服务器( MS的[IIS]或Apache) 立刻成为SOAP 的ORBS,SOAP 通讯协议使用HTTP来发送XML格式的信息,HTTP与RPC的协议很相似、 配置广泛,并且对防火墙比其它协议更容易发挥作用,HTTP请求一般由Web服务器软件(如IIS和Apache)来处理, 但越来越多的应用服务器产品正在支持HTTP,XML作为一个更好的网络数据表达方式( NDR)。
  • SOAP把XML的使用代码化为请求和响应参数编码模式, 并用HTTP作传输,具体地讲,一个SOAP方法可以简单地看作遵循SOAP编码规则的HTTP请求和响应, 一个SOAP终端则可以看作一个基于HTTP的URL, 它用来识别方法调用的目标。像CORBA/IIOP一样, SOAP不需要具体的对象绑定到一个给定的终端, 而是由具体实现程序来决定怎样把对象终端标识符映像到服务器端的对象。

SOAP的优点[ ]

  1. SOAP是可扩展的,SOAP无需中断已有的应用程序, SOAP客户端、 服务器和协议自身都能发展,而且SOAP能极好地支持中间介质和层次化的体系结构。
  2. SOAP 是简单的,客户端发送一个请求,调用相应的对象, 然后服务器返回结果,这些消息是XML格式的,并且封装成符合HTTP协议的消息。因此它符合任何路由器防火墙或代理服务器的要求。
  3. SOAP是完全和厂商无关,SOAP可以相对于平台、 操作系统、 目标模型和编程语言独立实现。另外传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。
  4. SOAP 与编程语言无关,SOAP可以使用任何语言来完成, 只要客户端发送正确SOAP请求( 也就是说传递一个合适的参数给一个实际的远端服务器)。SOAP 没有对象模型, 应用程序可以捆绑在任何对象模型中。
  5. SOAP与平台无关,SOAP可以在任何操作系统中无需改动正常运行。

SOAP-RPC[ ]

SOAP消息本质上是一种从发送方到接收方的单向传输,但是SOAP经常组合到实现请求/响应机制中,要让RPC使用SOAP,必须遵循几条规则。首先请求和响应消息必须被编码成结构类型,对一个操作的每一个输入参数,都必须有一个同名元素(或输入结构的成员)作为参数,对每一个输出参数,都必须有一个名称匹配的元素(或输出结构的成员)。 基于RPC的观点,会省略一些更早一点显示的SOAP消息,只带有报文部分的 SOAP请求与响应封套如下所示:

  • 请求DEF响应22.50请求要调用GetLastTradePrice方法,注意响应定义了 GetLastTradePriceResponse操作,对附加响应到响应操作尾部的一个常用的SOAP调用规则是:创建响应结构,这种输出结构包含一个名称为price的元素,它返回方法调用的结果,假定为浮点型。
  • 在SOAP封套中没有什么地方的数据类型是显式声明的,注意到这一点很重要,这样如果只查看SOAP消息,就不会知道符号类型或结果参数price(价格)的类型,客户端应用程序一般过“Section 5”编码定义数据类型,或通过与服务器私下达成的协议来定义数据类型,在任何一种情况下,这些包含在SOAP消息中的 定义都不是显式的。
  • 最后为了进行RPC,需要一种低级协议如HTTP。尽管SOAP 1.0规范强制要求 使用HTTP作为传输协议,但SOAP1.1规范(及其姊妹规范“带有附件的SOAP消息” )允许使用FTP、SMTP、甚至(可能)原始的TCP/IP套接字。

相关条目[ ]

参考来源[ ]