您好,欢迎来到花图问答。
搜索
您的当前位置:首页??SOAP

??SOAP

来源:花图问答
    本文由leefun0413贡献    doc1。

    浅谈 SOAP 随着计算机技术的不断发展, 现代企业面临的环境越来越复杂, 其信息系统大多数为多平台、 多系统的复杂系统。 这就要求今天的企业解决方案具有广泛的兼容能力, 可以支持不同的系 统平台、数据格式和多种连接方式,要求在    Internet 环境下,实现系统是松散耦合的、跨平台的,与语言无关的,与特定接口无关的, 而且要提供对 Web 应用程序的可靠访问。

    随着异种计算环境的不断增加, 各种系统间的互操作性就愈显得必要, 要求系统能够无 缝地进行通信和共享数据,从而在 Internet 环境下,消除巨大的信息孤岛,实现信息共享、 进行数据交换,达到信息的一致性。Web services 希望实现不同的系统之间能够用“软件软件对话”的方式相互调用,打破了软件应用、网站和各种设备之间的格格不入的状态,实 现“基于 WEB 无缝集成”的目标。    什么是 SOAP? ?

    SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中 交换信息的简单的协议,是一个基于 XML 的协议,它包括四个部分:SOAP 封装(envelop), 封装定义了一个描述消息中的内容是什么, 是谁发送的, 谁应当接受并处理它以及如何处理 它们的框架;SOAP 编码规则(encoding rules),用于表示应用程序需要使用的数据类型的 实例; SOAP RPC 表示(RPC representation),表示远程过程调用和应答的协定;SOAP 绑定 (binding),使用底层协议交换信息。    虽然这四个部分都作为 SOAP 的一部分,作为一个整体定义的,但他们在功能上是相

    交的、彼此的。特别的,信封和编码规则是被定义在不同的 XML 命名空间(namespace) 中,这样使得定义更加简单。

    SOAP 的两个主要设计目标是简单性和可扩展性。 这就意味着有一些传统消息系统或分布式 对象系统中的某些性质将不是 SOAP 规范的一部分。比如:分布式垃圾收集 (Distributed garbage collection) 、 成 批 传 送 消 息 (Boxcarring or batching of messages) 、 对 象 引 用 (Objects-by-reference(which requires distributed garbage collection))、对象激活 (Activation (which requires objects-by-reference))。

    SOAP 消息举例: 消息举例:

    1.第一个例子阐明了 SOAP 中一个简单的通信信息,包括了两个不是 SOAP 定义而是 应用程序定义的元素:头块元素 alertcontrol 和体块元素 alert。头块元素包括两个参数: priority 和 expires。体块元素包括的是实际传送的信息。    (EXAMPLE 1)

    2. SOAP 通信与底层的不同协议和不同的交换格式有关, 下面的例子 SOAP 使用 HTTP 作为底层通信协议,从而可以很好的使用 request/response 机制来传送信息。 SOAP/HTTP 请求包括一个 GetLastTradePrice 的块元素,该请求携带一个字符串参数和 ticker 符号,在 SOAP 应答中返回一个浮点数。 XML 名域用来区分 SOAP 标志符和应用程序特定的标志符。    (EXAMPLE 2)

    3. 例 3 展示的是 StockQuote SOAP 服务信息,是对例 2 的请求作出的一条应答消息。

    (EXAMPLE 3)

    SOAP 与 CORBA,COM/DCOM 的区别? 的区别? , 在 SOAP 刚刚提出来的时候,许多人就提出了疑问:SOAP 与 CORBA 和 DCOM 的区 别何在?

    ・ CORBA(Common Object Request Broker Architecture)公共对象请求代理体系结构 是由 OMG 组织制订的一种标准的面向对象应用程序体系规范。由对象请求代理 ORB、对 象服务、公共设施、域接口和应用接口这几个部分组成。其核心部分是对象请求代理 ORB (Object Request Broker)。ORB 提供了一种机制,通过这种机制,对象可以透明的发出请 求和接收响应。分布的、可以互操作的对象可以利用 ORB 构造可以互操作的应用。ORB 可 看作是在对象之间建立客户/服务关系的一种中间

page 1

件。基于 ORB,客户可以透明的调用服务

    对象提供的方法, 该服务对象可以与客户运行在同一台机器上, 也可以运行在其他机器上通 过网络与客户进行交互。ORB 截取客户发送的请求,并负责在该软件总线上找到实现该请 求的服务对象,然后完成参数、方法调用,并返回最终结果。CORBA 1.1 由对象管理组织 在 1991 年发布。定义了接口定义语言(IDL)和应用编程接口(API),从而通过实现对 象请求代理(ORB)来激活客户/服务器的交互。CORBA 2.0 于 1994 年的 12 月发布定义 了如何跨越不同的 ORB 提供者而进行通讯。    ・ COM/DCOM(Component Object Model / Distributed Component Object Model )是微软公司 提出的分布式组件对象模型标准,支持在局域网、广域网甚至 Internet 上不同计算机的对象 之间的通讯。DCOM 基于 COM 的应用程序、组件、工具等的基础之上,处理网络协议的低 层次的细节问题, 而不必关心太多的网络协议细节, 从而使用户能够集中精力解决用户所要 求的问题。DCOM 位于应用程序的组件之间,将组件以不可见的方式胶合在一起组成具有 完整功能的应用程序。    SOAP 与 CORBA,DCOM/COM 的比较。

    首先指出的是 SOAP 不会取代 CORBA,COM/DCOM,三者的概念有所区别。 COM/DCOM 是个组件模型标准,CORBA 是分布式应用的服务标准。CORBA 和 DCOM 为 分布式应用程序建立服务,服务对象来执行客户端调用的服务。而 SOAP 是基于 XML 和 HTTP 的分布式对象的通信协议, COM/DCOM 和 CORBA 对象进行通讯的协议。 是 实际上, 利用 SOAP 的互操作性和 CORBA 强大的执行能力,两者可以很好的结合在一起。 OMG (Object Management Group responsible for the CORBA specification)正在关注这方面的发 展。

    CORBA 应用程序和 DCOM 应用程序不能实现互操作,两者不能在一起协作。因为在 ORPC(Object RPC)协议中,用 ObjRef 代表了一个正在运行对象的引用;在 CORBA/IIOP(Internet Inter-Orb Protocol)中,用交换可互操作对象引用 IOR(Interoperable Object Reference) 代表一个服务器的对象引用。 不幸的是, IOR 与 ObjRef 不能够关联起来。 然而,使用 SOAP 可以实现在垂直应用层面上 CORBA ,DCOM 技术的水平整合,能够更 好的集成 CORBA,DCOM 为一个整体。

    SOAP 并没有定义信息的语义, 服务质量, 基于 INTERNET 的事务处理。 而是采用 XML 进行消息编码, 正确的处理需要服务器和客户端本身来执行, 理解和执行彼此使用的信息格 式(ONE-TO-ONE,REQUEST/REPLY,BROADCAST,ETC),应用程序本身在语析 中扮演着十分重要的角色。而 CORBA,DCOM 表示了传送信息的语义,对参数和返回值使 用二进制编码。可对诸如参数名称或类型的任何元信息都不编码,但使中介很难处理消息。 又因为每个系统使用不同的二进制编码,系统间的互操作的很难实现。

    尽管 CORBA 可以在不同的平台上执行,DCOM 可以在微软的各种平台上运行,但是 基于 CORBA 和 DCOM 的解决方案必须依赖于单一的应用程序。比如说,假如运行的是 DCOM 服务器程序,所有的分布式的客户端不得不运行于微软的操作平台上。CORBA 虽 然可以运行于不同的平台,但 CORBA 的互操作性并没有在更高层的服务上进行扩展,如安 全性和事务处理,在这种情况下,许多提供的服务没有得到很好的优化。DCOM 和 CORBA 适合于服务器--服务器间的通讯,但是对于客户端--服务器的通讯十分脆弱,尤其当客户程 序分布在 INTERNET 上更是如此。 SOAP 不象 DCOM 一样试图定义分布式系统的所有元素,SOAP 没有提供分布式类库, 类型安全检查, 版本控制等等, SOAP 比它处于一个更低的层次, 有点类似于 IIOP 在 CORBA 的作用,DCOM 却提供了一些额外的协议功能,是 IIOP 或者 SOAP 所不具备的。然而,许 多. DCOM 的额外功能只有在服务器――服务器间通信时才会用到, 对于客户端――服务器 之间的通信则是多余的。 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。

page 2

    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 应答传给客户端。 SOAP 的前景 W3C 于 2000 年 5 月 8 日发表了 Simple Object Access Protocol (SOAP) 1.1 版本, 具体 规范发布在下列站点上 (http://www.w3.org/TR/SOAP/) 又于 2001 年 7 月 9 号推出了 SOAP 。 Version 1.2 版本的建议草案,具体规范发布在下列站点上(http://www.w3.org/TR/soap12/)。 编写 SOAP Version 1.1 版本的工作小组的成员包括:DevelopMentor, International Business Machines Corporation, Lotus Development Corporation, Microsoft, UserLand Software。

    SOAP 的推出是令人兴奋的。可以相信,随着网络服务的的不断发展,它将极大的改变 我们的思考模式和开发模式。现在,已有许多大公司着手支持 SOAP 的开发,2000 年 IBM 公司 和 Microsoft 公司 都发行了实现 SOAP 的第一批版本。 IBM 公司启动了 Apache SOAP 项目计划,微软最近又推出了 SOAPtoolkit2.0 的正式版,主要包括如下的一些特征: SOAP 的高层接口和低层接口,消息对象接口,完全支持 WSDL 1.1 标准,支持用户自定义 类型映射,并且提供了丰富和完整的开发文档以及应用实例。而且,两家公司正在互操作性 方面努力研究。可以乐观的估计,不用多久,SOAP 互操作性的时代就将来临。

    相关的一些标准: 与 SOAP 相关的一些标准:

    HTTP 1.0 or greater(http://www.w3.org/Protocols/HTTP/ietf-http-ext)    the core W3C XML recommendation(http://www.w3.org/TR/1998/REC-xml-19980210)

    W3C XML namespace recommendation(http://www.w3.org/TR/REC-xml-names).

    XML Schema(http://www.w3.org/TR/xmlschema-1/)    支持 SOAP 的一些公司产品:    Organization Product

page 3

    Rogue Wave Nouveau ORB    Iona Orbix 2000    ObjectSpace Voyager

    Digital Creations Zope, the Python Application Server    UserLand Frontier groupware product    Microsoft Windows DNA 2000

    SOAP 是一个协议,与编程语言无关。实际上,许多语言已经开始支持 SOAP,如: java,c/c++,vb,c#,perl,php.下面列出了在 Java/C++/Perl/ADA/Python 环境下 SOAP 的执行工具:

    Java: Apache SOAP , DevelopMentor's implementation, IdooXoap from ZVON

    Python: PythonWare (client side only) C++: IdooXoap from ZVON Perl: SOAP::Lite ADA: An ADA implementation Microsoft Visual Studio: The Microsoft SOAP toolkit.

page 4

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务