• 详解SOAP简单对象访问协议


           随着计算机技术的不断发展,现在企业面临的环境越来越复杂,其信息系统大多数为多平台、多系统的复杂系统。这就要求今天的企业解决方案具有广泛的兼容能力,可以支持不同的系统平台、数据格式和多种链接方式,要求在internet环境下,实现系统是松耦合的、跨平台的,与语言无关的,与特定接口无关的,而且要提供对web应用程序的可靠访问。对于WEB服务堆栈来说其SOAP在WEB服务堆栈中作为用于XML消息传递的一种非常普遍的协议,发挥着十分重要的作用。

     1、SOAP协议分析

           在网络应用服务中,我们规定SOAP协议为一种标准化的通讯规范。那么这个SOAP协议的意思则是:简单对象访问协议(SOAP,全写为Simple Object Access Protocol),它主要用于Web服务(web service)中。SOAP的出现是为了简化网页服务器(Web Server)在从XML数据库中提取资料时,无需花时间去格式化页面,并能够让不同应用程式之间透过HTTP通讯协定,以XML格式互相交换彼此的资料,使其与程式语言、平台和硬体无关。

           用一个简单的例子来说明SOAP使用过程,一个SOAP消息可以发送到一个具有 Web Service 功能的 Web 站点,例如,一个含有房价信息的数据库,消息的参数中标明这是一个查询消息,此站点将返回一个 XML 格式的信息,其中包含了查询结果(价格,位置,特点,或者其他信息)。由于数据是用一种标准化的可分析的结构来传递的,所以可以直接被第三方站点所利用。

    2、SOAP协议定义

    1.1、SOAP相关定义

           SOAP封装(envelop),它定义了一个框架,描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们。

           SOAP编码规则(encoding rules),它定义了一种序列化的机制,用于表示应用程序需要使用的数据类型的实例。

           SOAPRPC表示(RPC representation),它定义了一个协定,用于表示远程过程调用和应答。

            SOAP绑定(binding),它定义了SOAP协议使用哪种协议交换信息。使用HTTP/TCP/UDP协议都可以。

            把SOAP绑定到 HTTP 提供了同时利用SOAP的样式和分散的灵活性的特点以及 HTTP 的   丰富的特征库的优点。在 HTTP 上传送SOAP并不是说SOAP会覆盖现有的 HTTP 语义,而是HTTP 上的SOAP语义会自然的映射到 HTTP 语义。在使用 HTTP 作为协议绑定的场合中, RPC 请求映射到 HTTP 请求上,而 RPC 应答映射到 HTTP 应答。然而,在 RPC 上使用SOAP并不仅限于 HTTP 协议绑定。

    1.2、SOAP传输方式

           SOAP使用因特网应用层协议作为其传输协议。SMTP以及HTTP协议都可以用来传输SOAP消息,但是由于HTTP在如今的因特网结构中工作得很好,特别是在网络防火墙下仍然工作流畅,所以其更为广泛地被采纳。SOAP亦可以在HTTPS上进行传输。

    1.3、SOAP的消息格式采用XML

    SOAP协议的消息实例
    1)请求:

    1. <soapenv:Envelope 
    2.  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    3.     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5.   <soapenv:Body> 
    6.     <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/"> 
    7.       <req:category>classifiedsreq:category
    8.     req:echo
    9.   soapenv:Body
    10. soapenv:Envelope

    2)回应:

    1. <soapenv:Envelope 
    2.     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
    3.     xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
    4.   <soapenv:Header> 
    5.     <wsa:ReplyTo> 
    6.       <wsa:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymouswsa:Address
    7.     wsa:ReplyTo
    8.     <wsa:From> 
    9.       <wsa:Address>http://localhost:8080/axis2/services/MyServicewsa:Address
    10.     wsa:From
    11.     <wsa:MessageID>ECE5B3F187F29D28BC11433905662036wsa:MessageID
    12.   soapenv:Header
    13.   <soapenv:Body> 
    14.     <req:echo xmlns:req="http://localhost:8080/axis2/services/MyService/"> 
    15.       <req:category>classifiedsreq:category
    16.     req:echo
    17.   soapenv:Body
    18. soapenv:Envelope

    3、SOAP=RPC+HTTP+XML

           SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。RPC的描叙可能不大准确,因为SOAP一开始构思就是要实现平台与环境的无关性和独立性,每一个通过网络的远程调用都可以通过SOAP封装起来,包括DCE(Distributed Computing Environment ) RPC CALLS,COM/DCOM CALLS, CORBA CALLS, JAVA CALLS,etc。

           SOAP 使用 HTTP 传送 XML,尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 SOAP。

          为了更好的理解SOAP,HTTP,XML如何工作的,不妨先考虑一下COM/DCOM的运行机制,DCOM处理网络协议的低层次的细节问题,如PROXY/STUB间的通讯,生命周期的管理,对象的标识。在客户端与服务器端进行交互的时候,DCOM采用NDR(Network Data Representation)作为数据表示,它是低层次的与平台无关的数据表现形式。

           DCOM是有效的,灵活的,但也是很复杂的。而SOAP的一个主要优点就在于它的简单性,SOAP使用HTTP作为网络通讯协议,接受和传送数据参数时采用XML作为数据格式,从而代替了DCOM中的NDR格式,SOAP和 DCOM执行过程是类似的,如下图:

    但是用XML取代 NDR作为编码表现形式,提供了更高层次上的抽象,与平台和环境无关。

           客户端发送请求时,不管客户端是什么平台的,首先把请求转换成XML格式,SOAP网关可自动执行这个转换。为了保证传送时参数,方法名,返回值的唯一性,SOAP协议使用了一个私有标记表,从而服务端的SOAP网关可以正确的解析,这有点类似于COM/DCOM中的桩(STUB)。转化成XML格式后,SOAP终端名(远程调用方法名)及其他的一些协议标识信息被封装成HTTP请求,然后发送给服务器。

           如果应用程序要求,服务器返回一个HTTP应答信息给客户端。与通常对HTML页面的HTTP GET请求不同的是,此请求设置了一些HTTP HEADER,标识着一个SOAP服务激发,和HTTP包一起传送。例如:对于一个询问股票价格的应用程序,服务器端具有组件提供某股票当前的价格,组件是COM或CORBA在服务器上建立的。客户端发送一个SOAP请求给服务器询问股票价格。服务器依赖于服务器上的SOAP网关,使用内嵌的HTML对象调用合适的方法, 然后把得到的价格通过SOAP应答传给客户端。    

    4、总结

           SOAP是一种基于XML的协议,它用于在分布式环境中方式消息,并执行远程过程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议),就能使数据序列化。用SOAP来构建平台与语言中性的互操作系统是一个好的选择。总之,SOAP和 Web服务已为在XML上构建分布式应用程序基础结构所需的一切都考虑好了。通过解决COM和Java组件对象模型之间的冲突,SOAP把多个平台在访问数据时所出现的不兼容性问题减至最少。

  • 相关阅读:
    Zenmap安装及安装时遇到的问题解决办法(Windows)
    第六十二章 符号概览
    网络安全架构:安全架构公理
    Maven多模块版本统一管理
    发票查验API如何打破传统发票管理难题?
    通信协议综述
    【 与百度搜索相同的bootstrap4与5自动补全功能(autocomplete)】
    测试老鸟整理,从手工测试到自动化测试的进阶全程...
    第六届全国大学生生物医学工程创新设计竞赛参赛经历
    经典算法(查找与排序)
  • 原文地址:https://blog.csdn.net/chenlycly/article/details/125906651