简单对象访问协议SOAP及其应用

来源:互联网 发布:mathcad竞争软件 编辑:程序博客网 时间:2024/05/21 12:47

1、概述

2、分布式协议技术与SOAP关系

3、有关SOAP概念简介

4、SOAP的B2B电子商务应用

一、概述

SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。SOAP 技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。

SOAP为在一个松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制。SOAP本身并不定义任何应用语义,如编程模型或特定语义实现,它只是定义了一种简单的机制,通过一个模块化的包装模型和对模块中特定格式编码的数据的重编码机制来表示应用语义。SOAP的这项能力使得它可被很多类型的系统用于从消息系统到RPC(Remote Procedure Call)的延伸。

SOAP由四部分组成:

1)SOAP envelop (SOAP信封),它构造定义了一个整体的表示框架,可用于表示在消息(message)中的是什么,谁应当处理它,以及这是可选的还是强制的。

2)SOAP encoding rules (SOAP编码规则),它定义了一个编序机制用于交换应用程序定义的数据类型的实例。

3)SOAP RPC representation (SOAP RPC表示),它定义了一个用于表示远端过程调用和响应的约定。

4)SOAP binding (SOAP绑定),它定义了一个使用底层传输协议来完成在结点间交换SOAP信封的约定。

SOAP的主要设计目标是简明性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的特性将不包含在SOAP的核心规范中。这些特性包括:

  • 分布式垃圾收集;

  • 批量消息传输/处理;

  • 对象引用 (需要分布式垃圾收集的支持);

  • 对象激活 (需要对象引用的支持)。

    SOAP定义了一种消息交互机制,它描述了如何用XML对信息进行编码。通常,SOAP用于在运行时解释远程调用的参数值,并且使用特定的编码方式将这些值填充在XML文档中。然后,XML数据通过HTTP协议传输至远程服务器,当然有时也使用其他传输协议。除此之外,还有许多远程方法调用规范,例如,CORBA的 IIOP,DCOM的ORPC,以及Java的Remote Method Protocol。 SOAP的特点——也是最大的优点在于它是基于文本的(通过采用XML),而不是二进制,而且它不是某个制造商所特有的。

    SOAP使用通用的传输协议-----主要是HTTP。这不仅是SOAP的秘密武器,也是它成功的关键。由于公司的防火墙很少限制HTTP数据,(使用HTTP作为传输协议的)SOAP应该很容易通过防火墙。专用的分布式计算协议是不可能做到的。它们使用的网络地址通常不允许进入安装了防火墙的安全系统。  

    SOAP的另一优点在于XML。SOAP能够将以前无法通信和共享资源的系统集成在一起。目前,各种计算系统正逐渐支持XML。只要能够将XML文档传入系统,通常就可以找到用于读取和解释XML编码信息的软件。为了支持远程计算,SOAP将方法调用参数保存为特有的二进制格式,并将这些参数作为XML信息传递到远程服务器,然后,服务器上相应的SOAP处理程序提 XML信息,并将它恢复为二进制形式进行处理。

    二、分布式协议技术与SOAP关系
    1、分布式协议技术CORBA、COM/DCOM/COM+和EJB
  • CORBA(Common Object Request Broker Architecture)公共对象请求代理体系结构是由OMG组织制订的一种标准的面向对象应用程序体系规范。由对象请求代理ORB、对象服务、公共设施、域接口和应用接口这几个部分组成。其核心部分是对象请求代理ORB(Object Request Broker)。ORB提供了一种机制,通过这种机制,对象可以透明的发出请求和接收响应。分布的、可以互操作的对象可以利用ORB构造可以互操作的应用。ORB可看作是在对象之间建立客户/服务关系的一种中间件。基于ORB,客户可以透明的调用服务对象提供的方法,该服务对象可以与客户运行在同一台机器上,也可以运行在其他机器上通过网络与客户进行交互。ORB截取客户发送的请求,并负责在该软件总线上找到实现该请求的服务对象,然后完成参数、方法调用,并返回最终结果。CORBA 1.1 由对象管理组织在 1991 年发布。定义了接口定义语言(IDL)和应用编程接口(API),从而通过实现对象请求代理(ORB)来激活客户/服务器的交互。CORBA 2.0 于 1994 年的 12 月发布定义了如何跨越不同的 ORB 提供者而进行通讯。

        CORBA规范的近期发展,增加了面向Internet的特性,服务质量控制和CORBA构件模型(CORBA Component Model)。Internet集成特性包括了针对IIOP传输的防火墙(Firewall)和可内部操作的定义了URL命名格式的命名服务(Naming Service)。服务质量控制包括能够具有质量控制的异步消息服务,一组针对嵌入系统的CORBA定义,一组关于实时CORBA与容错CORBA的请求方案。CORBA CCM(CORBA Component Model)技术,是在支持POA的CORBA规范(版本2.3以后)基础上,结合EJB当前规范的基础上发展起来的。

        COM/DCOM(Component Object Model / Distributed Component Object Model )是微软公司提出的分布式组件对象模型标准,支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。DCOM基于COM的应用程序、组件、工具等的基础之上,处理网络协议的低层次的细节问题,而不必关心太多的网络协议细节,从而使用户能够集中精力解决用户所要求的问题。DCOM位于应用程序的组件之间,将组件以不可见的方式胶合在一起组成具有完整功能的应用程序。COM+是随着Windows 2000的发布,Microsoft在COM的基础上针对应用层的需要而推出的一套组件框架技术。COM+不再局限于COM的组件技术,它更加注重于分布式网络应用的设计和实现,COM+继承了COM几乎全部的优势,同时又避免了COM实现方面的一些不足。COM+紧紧地与操作系统结合起来,通过系统服务为应用程序提供全面的服务。COM+不仅继承了COM,DCOM和MTS的许多特性,同时也新增了一些服务,比如负载平衡、内存数据库、事件模型、队列服务等。COM+新增的服务为COM+应用提供了很强的功能,建立在COM+基础上的应用程序可以直接利用这些服务而获得良好的企业应用特性。

    EJB(Enterprise JavaBeans)是Sun推出的基于Java的服务器端构件规范J2EE的一部分,自从J2EE推出之后,得到了广泛的发展,已经成为应用服务器端的标准技术。Sun EJB技术是在Java Bean本地构件基础上,发展的面向服务器端分布应用构件技术。EJB给出了系统的服务器端分布构件规范,这包括了构件、构件容器的接口规范以及构件打包、构件配置等的标准规范内容。从分布式计算的角度,EJB像CORBA一样,提供了分布式技术的基础。提供了对象之间的通讯手段。

    EJB是用于开发安全、可扩展、事务型以及多用户组件的一种分布式组件模型。简单地讲,EJB是(理想的)包含业务逻辑的可重用软件单元。正如JSP网页允许把应用程序和表示逻辑分开,EJB允许把应用程序逻辑与系统级服务分开,这样开发者可以集中精力于具体业务问题,而不是系统编程。这些企业小程序(bean)业务对象具有三种基本形式,同样也没有必要三者都实现,它们分别是会话(session)bean、实体(entity)bean和消息驱动(message-driven)bean。 企业级JavaBean是一种以组件为基础的分布式计算环境的结构体系,企业Bean是分布式的面向交易处理的企业应用系统的组件。

     

    2、SOAP 与CORBA、DCOM/COM/COM+和EJB的关系

     

    首先指出的是SOAP不会取代CORBA,COM/DCOM,三者的概念有所区别。COM/DCOM是个组件模型标准,CORBA是分布式应用的服务标准。CORBA和DCOM为分布式应用程序建立服务,服务对象来执行客户端调用的服务。而SOAP是基于XML和HTTP的分布式对象的通信协议,是COM/DCOM和CORBA对象进行通讯的协议。实际上,利用SOAP的互操作性和CORBA强大的执行能力,两者可以很好的结合在一起。 OMG正在关注这方面的发展。 CORBA应用程序和DCOM应用程序不能实现互操作,两者不能在一起协作。因为在ORPC(Object RPC)协议中,用ObjRef代表了一个正在运行对象的引用;在CORBA/IIOP(Internet Inter-Orb Protocol)中,用交换可互操作对象引用IOR(Interoperable Object Reference)代表一个服务器的对象引用。不幸的是,IOR 与 ObjRef不能够关联起来。然而,使用SOAP可以实现在垂直应用层面上CORBA ,DCOM技术的水平整合,能够更好的集成CORBA,DCOM为一个整体。

    虽然CORBA、DCOM/COM/COM+和EJB三种平台因为其形成的历史背景和商业背景有所不同,各自有自己的侧重和特点,其实在它们之间也有很大的相通性和互补性。例如,EJB提供了一个概念清晰、结构紧凑的分布计算模型和构件互操作的方法,为构件应用开发提供了相当的灵活性。CORBA CCM是一种集成技术,而不是编程技术。它提供了对各种功能模块进行构件化处理并将它们捆绑在一起的粘合剂。EJB和CORBA在很大的程度是可以看作为互补的。这个适应WEB应用的发展要求,许多厂商多非常重视促进EJB和CORBA技术的结合,将来RMI可能建立在IIOP之上。CORBA不只是对象请求代理ORB,也是一个非常完整的分布式对象平台。CORBA可以扩展EJB在网络、语言、组件边界、操作系统中的各种应用。目前许多平台都能实现EJB构件和CORBA构件的互操作。同EJB和CORBA之间相互之间方便的互操作性相比,DOCM和CORBA之间的互操作性要相对复杂些,虽然DCOM和CORBA极其类似。DOCM的接口指针大体相当于CORBA的对象引用。为了实现CORBA和DCOM的互操作,OMG在CORBA 3.0的规范中,加入了有关的CORBA和DCOM互操作的实现规范,并提供了接口方法。

    随着SOAP的出现,人们越来越发现这是解决不同组件平台互联的一个理想技术,此时,XML已经得到广泛的应用,大多数平台已经有了能够使用的XML的处理器,使用XML重新描述和包装各自的远程组件访问协议,以使得各种组件平台的远程访问协议都能通过同一个标准的消息进行传输,这就是SOAP的初始概念。

                                       图1 SOAP 抹平组件平台差异

     

    参照图1,我们可以看到,虽然各种组件平台都有其自身的远程对象调用协议,CORBA是IIOP,COM+是ORPC,而J2EE/EJB是RMI,然而它们都能够将这些协议中的数据重新包装成SOAP,也就是说,每个平台需要有一个协议适配器,以实现从自身协议到SOAP协议的转化,如此它们就能够通过SOAP协议互相调用了。

    SOAP是与平台无关的纯消息协议规范,而且又是基于应用广泛的平台无关的数据描述规范XML的,能够顺利地在各个平台进行实施。

    三、有关SOAP概念简介

     

    1、协议

    ·SOAP

    关于SOAP消息的格式和处理规则为沿着SOAP消息传输路径交换信息面需要的,不同应用程序之间生成和接收SOAP消息的交互过程的简单控制机制的一整套规范和约定。

    ·SOAP绑定

    它为传输的需要而将SOAP消息在另一个底层网络传输协议之上或之内传输的一整套规范和规则。典型的SOAP绑定包括在HTTP消息中传送SOAP消息或在TCP之上传送SOAP消息等。

    SOAP结点

    SOAP结点根据SOAP定义的整套规范来处理SOAP消息。SOAP结点有责任遵守SOAP消息交换的规则以及提供通过依赖底层协议的SOAP绑定来访问的服务。任何不符合SOAP约定的情况都将导致SOAP结点产生一个SOAP fault(SOAP错误)。

    数据封装

    ·SOAP消息

    SOAP消息是在对等SOAP结点间通信的基本单位。

    ·SOAP信封

    SOAP信封是SOAP规范中定义的SOAP消息(SOAP message)在句法上的最外层结构。在句法上,它包含了所有其他的SOAP元素和应用元素。

    ·SOAP条目

    OAP条目是一个句法上的结构,它用于包含一个逻辑上的单一元素,这一元素是需要被SOAP结点处理的。一个SOAP条目是由该条目最外层元素的完整修饰名(带命名空间修饰)所标识的,这个完整修饰名是由一个局部名和一个命名空间URI组成的。封装在SOAPHeader中的SOAP条目称为Header条目,而封装在SOAP body中的SOAP条目为Body条目。

    ·SOAP Header

    是能够被SOAP消息传输路径中任意的SOAP接收者结点处理的一组SOAP条目(0个或多个)。

    ·SOAP Body

    它是能够被SOAP消息路径中的最终SOAP接受结点处理的一组SOAP条目(0个或多个)。

    ·SOAP Fault

    它是SOAP结点产生的用于包含错误信息的特殊的SOAP条目。

     

                         图2 SOAP消息组成部分

     

        图2演示了一个SOAP消息的组成形式,由于采用了XML技术,我们可以看到它是一个完美的嵌套结构。

    ·SOAP数据模型

    它是一组抽象的构造约定,用于描述通用的数据类型和数据中的链接关系。

    ·SOAP数据编码

    它表示在SOAP消息中使用一个或多个SOAP条目,按照SOAP数据模型完成句法上的数据表示。

    3、 消息接收和发送

    ·SOAP发送者

    SOAP发送者是发出SOAP消息的SOAP结点。

    ·SOAP接收者

    SOAP接收者是接受SOAP消息的SOAP结点。

    ·SOAP消息路径

    SOAP消息路径指为传送一个简单的SOAP消息而要经过的一组SOAP发送者和SOAP接收者。其中包含了初始SOAP发送者、零个或多个SOAP中介结点以及最终的SOAP接收者。

    ·初始SOAP发送者

    它是SOAP消息的最初产生者,同时也是SOAP消息路径的第一个结点。

    ·SOAP中介结点

    SOAP中介结点既是SOAP接收者也是SOAP发送者,是SOAP消息可到达的某一个应用程序。当SOAP消息沿着SOAP消息路径传输时,SOAP中介结点将处理一组确定的SOAP条目,然后它将消息转发给消息路径的下一个SOAP结点,直至传送到最终SOAP接收者。

    ·最终SOAP接收者

    它是指由初始SOAP发送者指定的通过SOAP消息路径传送的SOAP消息的最终的接收者。如果在SOAP消息路径中有SOAP结点产生了SOAP错误,那么SOAP消息将不会到达最终接收者。

    ·SOAP应用

    SOAP应用是一个生产、消费SOAP消息或者对SOAP消息实施一些其他的动作的软件实体,在处理SOAP消息时,其行为是遵循SOAP处理模型的。

    4、 数据编码概念

    ·SOAP数据模型

      一组抽象的构造约定,用于描述通用的数据类型和数据中的链接关系。

    ·SOAP数据编码

      在SOAP消息中使用一个或多个SOAP条目,按照SOAP数据模型完成句法上的数据表示。

    四、SOAP的B2B电子商务应用

    企业级(Business to Business)电子商务一般被简称为B2B的电子商务过程,它是一个将买方、卖方以及服

    务于他们的中间商(如金融机构)之间的信息交换和交易行为集成到一起的电子运作方式。在INTERNET上实现B2B电子商务必须具备一定的基础,其主要表现在:1)信息的标准化;2)用户身份验证;3)网络交易集成技术。针对这三点SOAP 给于了很好的支持:1)SOAP使用XML来描述数据,而XML是表达数据的标准方式的通常选择。2)SOAP使用现有基于TCP/IP的应用层协议HTTP、SMTP、POP3等,可以获得与现有通信技术最大程度地兼容。把SOAP绑定到HTTP,可充分发挥基于HTTP消息协议的安全性。3)SOAP的消息路径机制和可扩充的Header和Body机制为分布式计算提供了很好的支持,它对于局域网应用和要求实现自动化数据交换的分布式入口尤为有效。企业可以在现有消息体系的基础上,以各分布点存储的数据为依托编写应用程序,通过SOAP解决由不同组件技术建立的后端系统的集成问题。

     

    SOAP Message(SOAP消息)是用于传输应用入口调用信息的承载体,尤其是B2B应用调用。从根本上来看,SOAP Message是从发送方到接受方的一种传输方法。在B2B应用中,SOAP消息是B2B应用调用信息的基本承载体。

    SOAP Envelope(SOAP信封)用于描述SOAP Message的结构,定义了一个以SOAP Header,SOAP Body为子主体的描述结构。SOAP Envelope是SOAP Message的信息框架。在B2B应用中,SOAP Envelope为B2B应用调用信息提供了一个基本的信息描述框架。

    SOAP Header提供了一个可伸缩的机制用于在分散的模块化扩展SOAP消息,而通讯双方并不需要有预先的约定知识。在B2B应用中的典型的扩展例子可以是实现一些诸如认证、事务管理以及支付的Header条目。

    SOAP Body元素提供一个简单的用于与消息的最终接收者交换必须处理的信息的机制。在SOAP Body中可以描述应用入口调用和响应的各种数据信息。在B2B应用中,Body元素的应用可以是B2B应用调用请求信息(如产品ID、产品数量等)和响应信息(如订单号、订单履行日期)及错误信息(如产品库存不够等)。

    SOAP Encoding(SOAP遍序方法)是基于一个简单类型系统,而这个系统是程序语言、数据库和半结构数据中类型系统的公共特性的泛化。默认的SOAP Encoding定义和XML Schema是相容的,基本一致的。SOAP Encoding使类似整数(integer)、字符串(string)、数组(array)、结构(struct)等数据类型得以在SOAP消息中表示。SOAP Encoding为SOAP Header和SOAP Body中的数据表示提供了默认的方式,当然你也可以使用其他任意基于XML Schema的型/值描述系统。

    SOAP RPC Presentation(SOAP RPC表示)是一个用于表示远端过程调用和响应的约定,利用XML的可扩展性和可伸缩性来包装和交换RPC调用。目前通过绑定各种已有的Internet协议,譬如HTTP、SMTP、POP3等,利用这些协议的调用响应机制,完成SOAP的调用和响应。具体地说,SOAP消息会作为这些协议的正文被发送。也就是说将SOAP协议包上了一个HTTP的外壳,在HTTP Network里面传输,当然SMTP、POP3也是同样。SOAP RPC Presentation是最终面向传输的绑定机制。

     

    原创粉丝点击