SOAP概述.docx
《SOAP概述.docx》由会员分享,可在线阅读,更多相关《SOAP概述.docx(10页珍藏版)》请在冰豆网上搜索。
SOAP概述
SOAP概述
简介
SOAP,简单地讲,就是允许Java对象和COM对象在分布式、分散的、基于Web的环境中彼此通话。
更一般地讲,SOAP允许任何类型的对象(或代码)?
?
在任何平台上,以任何一种语言?
?
相互通信。
目前,已在20多个平台上,以60多种语言实现了SOAP。
突然之间,任何地方的对象,无论本地或远程的,无论大或小,都可以互操作。
BradPitt和EdwardNorton,就像两种截然不同的对象,最终能够通信。
回顾一下这种技术,我最开始将在Web服务的大环境下介绍SOAP,SOAP作为一种协议,它与UDDI(通用描述、发现和集成)一起提供了业务间注册和消息传递服务。
我还将讨论揭示“发布-查找-绑定”范例的基于Web的基础,并介绍SOAP包装、传输和发送机制。
Web服务的发展
先把所有大肆张扬的宣传放在一边,SOAP仅仅只是一种组件?
?
虽然是一种中心组件?
?
用于把Web的蓝图描述成用于业务操作的、基于标准的、语言与平台中性的架构。
这些业务操作通常被标上了“Web服务”的通用标签,但是Web服务自身也只是一种支持它们的良好的基础。
相应地,Internet有一种快捷的n层基础。
网络分层
在Web服务的发展过程中,有3种网络层是显而易见的:
TCP/IP、HTTP/HTML和XML。
现在这3个层相继构建在彼此的顶上,并保持相互之间的兼容性。
第1层,TCP/IP协议,主要关注的是以分组形式通过线缆传输数据。
作为一种确保通过公共网络传输的协议,TCP/IP强调数据传输的可靠性和物理连通性。
起初是把专用网络粘合在一起,现在则是用Web中枢协议来连接网络,更高层次的标准协议如HTTP就是依赖于这种中枢协议的。
第2层,HTTP上的HTML,它是一个显示层,自身关注的是基于浏览器的搜索、检索和信息共享。
它强调的是基于GUI(图形用户界面)的导航和显示格式的处理。
在许多方面,HTML更多地是用于显示,而不是转到别的网页上,并且在可扩展性和真正的编程能力上有所欠缺。
虽然如此,在浏览器环境中共享超文本链接的文档使人们用基于文本的信息与他人通信的方式引发了革命。
网络桌面环境,受专用操作系统和依赖于平台的软件所限,速度缓慢,毫无疑问会让路于基于标准的,对系统开放的Internet。
把这种责任引导到这个勇敢的、新的、基于标准的世界的是XML,它是Internet的第3层,也可能是最引人注目的一层。
XML,一种强类型数据交换格式,它为HTTP/HTML层提供了一个新范围。
在XML层中,机器到机器的通信有可能通过标准接口来进行。
XML层?
?
有多种不同的描述,如A2A(应用程序到应用程序)、B2B(业务到业务)、或C2C(计算机到计算机)?
?
允许程序在平台上交换数据格式?
?
和显示?
?
独立于编程的方式。
XSLT样式表可以作为一种可选用的显示和/或可传输的组件予以添加。
XML:
描述Web服务的关键
把这种可能变为现实的关键是实现机器到机器的通信,这是XML力所能及的。
作为一种描述数据的词法,XML是定义驱动的(通过使用DTD和架构),并允许以编程方式处理信息。
这意味着大多数可考虑到的工作都可以从B2B通信中取出来。
可以有一致的标记,可以定义接口,处理也可以是标准化的。
Web服务是可重用的组件程序,它们把XML用作一种标准的、可扩展的通信架构,以方便机器到机器类型的通信。
Web服务为通过HTTP传输的组件数据和业务逻辑提供接口。
大量的数据被放置在服务器端脚本后面的一个传统的位置,等待着被Web浏览器或客户程序访问。
Web服务承诺使许多企业领域的、处于闲置状态的公司软件资源获得新生。
在把驻留于Web中的数据集成到企业应用程序中和协调用于组件片固定的业务逻辑方面,XML起了至关重要的作用。
特定的业务逻辑和服务(包括工作流程逻辑、业务逻辑、组件序列逻辑、交易逻辑等)可以封装在XML文档中,并集成到现有的业务环境中去。
这允许业务在内部资源和Web服务之间,简化业务交易逻辑和通过Web提供链条式交互之间起到杠杆作用。
由于XML是人们可阅读的和基于文本的,使之可理想地用作传输松耦合的Web服务的架构。
最低限度是:
自动化的交易可提高生产率、减少费用和改善服务。
网络标准的存在使自动化交易成为可能、使所有成员的生产率都能得到提高。
SOAP是一种源于更早的基于XML标准的技术,早期XML标准在某种意义是指一种称为ebXML(电子商务XML)的显示标准。
EbXML具有一种依次进行的连续逻辑,它在贸易合作者间提供了一种共享业务消息的综合定义。
SOAP适用的范围更普遍,也更容易实现。
松耦合的系统
Web服务把对象从管理它们的平台上分离开来,也就是说,Web服务使独立于平台的对象之间的交互更容易,对象可以访问Web上任何地方的数据。
作为脱离专用平台的一部分,Web服务依赖于松散而不是紧密耦合的Web组件。
根据BrianTravis(SOAP顾问和作者)的观点,“依赖于专用对象的系统被认为是耦合紧密的,因为它们依赖一种定义良好但很脆弱的接口。
如果应用程序与服务对象间通信的任何部分被打断,或者如果调用不完全正确,将会发生不可预料的结果。
”EDI就是一个用于执行电子商务的耦合紧密的架构的例子。
松耦合的系统允许在开放的、分布式Web环境中进行灵活的和动态的交换。
CORBA第二次降临
网络上的公司?
?
IBM、BEA、Sun,仅举几个例子?
?
同时在与他们竞争的公司合作。
标准化的网络传输协议,独立于平台的编程语言如:
Java、XML和特定行业的专业用语,及开放的基于组件的服务器体系结构使每个人都能免费享用非专用的资源。
现在,Web服务,带着其对包含广泛的应用程序互操作性的承诺,就像一种最终的“胶水”,使这些技术交互作用,即使不是无缝的,至少也不会超过以前技术如CORBA和RMI所带来的累赘。
在某种意义上,Web服务代表着CORBA的第二次降临。
但是CORBA是一种面向对象的、基于IIOP的二进制通信架构,是由基础、骨架和特定于供应商的ORB装载而成的;而Web服务则是轻型的、基于HTTP的、XML驱动的及平台和语言完全中性的。
如果说CORBA是一只重达600磅的大猩猩,那么Web服务就是一只小羚羊,在辽阔的Internet禁区里自由地蹦跳。
发布、绑定和查找
Web服务的架构由发布-查找-绑定这个周而复始的循环组成,它通过服务提供程序使数据、内容和服务能为注册的服务请求者所用,服务请求者通过定位和绑定到服务来使用资源。
请求应用程序使用WSDL(Web服务描述语言)把请求者转到Web服务上。
WSDL为想要的服务提供了一种低层次的技术信息,并授权访问关于数据编码的XML架构信息、及通过正确的协议确保调用正确的操作。
发布、绑定和查找机制,在3个独立(但有些等同)的协议中有它们各自的副本,这3个协议是WSDL、SOAP和UDDI(通用描述和发现接口),它们组成了Web服务网络栈。
对CORBA作更深层次的类推可以发现,SOAP起到了CORBA中IIOP(或RMI中的JRMP)的作用。
它是对立的端点间的绑定机制。
另一方面,WSDL起到了IDL(接口描述语言)的作用。
在这种功能上,WSDL把Web服务定义成端口和操作的集合。
WSDL端口是模拟接口的,而WSDL操作则是模拟方法的。
WSDL把Web服务接口发布给那些对跨越不同平台通信感兴趣的各方。
但是,WSDL已经超越了一种接口定义语言;它还包含允许给想发布的Web服务描述地址和协议信息的构造。
关于WSDL的令人感兴趣的事情是它为Web服务描述了一个抽象接口,同时还允许您?
?
以难以忍受的细节?
?
绑定Web服务给特定的传输机制,如HTTP。
通过使接口抽象化,WSDL可用作一种可重用的Web服务技术。
通过绑定到特定的传输机制,WSDL生成了抽象的类聚。
如果这看上去有些自相矛盾,可以想一下航天飞机:
它是可重复使用的、但要把全机能太空舱完全绑定到专用的、但不可重复使用的助力器火箭上。
传输机制可能会改变,但有效载荷会保留下来。
最后,UDDI是用于注册发布和查找Web服务的。
在基于Web的注册中,通过显示服务信息和绑定接口,UDDK为业务和客户提供了一个共享目录以查找别人的Web服务。
构建Web服务
SOAP可通过远程调用对象上的方法,让您构建应用程序。
SOAP消除了两种系统必须运行于同一平台上、且必须是用同一种编程语言编写而成的要求。
SOAP包不是通过专用的二进制协议调用方法,而是使用XML这种基本文本的词法来调用方法。
请求应用程序与接收对象之间的所有信息,是作为XML流中的标记数据通过HTTP发送的。
从Web服务的角度来看,SOAP可以看作一种客户端或服务器实现。
SOAP客户端和服务器
SOAP客户端是一种创建XML文档的程序,该XML文档包含在分布式系统远程调用方法所需的信息。
SOAP客户端不是传统意义上的程序,它除了用作普通的桌面应用程序外,还可以是一种Web服务器或基于服务器的应用程序。
来自SOAP客户端的消息和请求一般是通过HTTP发送的。
因而,SOAP文档可以穿过几乎所有的防火墙,从而能跨越不同的平台交换信息。
SOAP服务器只是用于监听SOAP消息的特殊代码,它可用作SOAP文档的分配器和解释器。
外部Web服务可以与基于J2EE技术的应用程序服务器交互,这种应用程序服务器可以处理多种客户端的SOAP请求。
SOAP服务器确保通过HTTP连接接收的文档被转换成可以被另一端对象理解的语言。
由于所有的通信都采用XML格式,某种语言(比如说Java)中的对象可以通过SOAP与另一种语言(如C++)中的对象通信。
SOAP服务器的工作就是确保各端都能理解?
?
并且满意?
?
为它们提供服务的SOAP。
SOAP和Java技术
根据SOAP1.1规范,SOAP是“一种用于在分散的、分布式环境中交换信息的轻型协议”。
SOAP不会委托单一的编程模型?
?
也不会为特定的编程语言定义语言绑定。
在Java编程语言环境中,它取决于Java团队来定义特定的语言绑定。
现在Java语言绑定通过JAX-RPC来集中定义。
在最近的JavaOne开发人员讨论会上对SOAP的讨论中,Sun公司的工程师RobertoChinnici和RahulSharma把JAX技术家庭的作用定义成“使用熟悉的、用于Java平台的JSP和EJB组件技术创建Web服务”。
Servlets和无状态会话bean被引用作两种最可能用于封装Web服务的Java技术。
什么是SOAP?
真的吗?
我们已经彻底设置好了SOAP舞台,并描述了其在Web服务中至关重要的作用,现在进一步看看SOAP到底是什么,它执行什么任务,以及是怎样执行的?
SOAP是一种可扩展的、基于文本的架构,它允许在不同角色之间通信,这里的角色一般是指对象,它们先前并不了解对方或对方所在的平台。
从网络对象的角度来看,SOAP是它们的最后不可见形式。
客户端应用程序可以在松耦合的环境中互操作,以发现和动态地连接到服务,而这并不需要事先在应用程序与服务之间建立一种协定。
SOAP是可扩展的,这是因为无需中断已有的应用程序,SOAP客户端、服务器和协议自身都能发展。
而且SOAP能极好地支持中间介质和层次化的体系结构。
这意味着处理节点可以把请求的路径置于客户端与服务器之外。
中间节点通过使用报头(用于标识哪个节点处理哪部分消息)来处理SOAP指定的各部分消息。
这种类型的中间报头处理是通过客户端应用程序与中间处理节点之间的私人契约来执行的。
SOAP为报头提供了一个mustUnderstand属性,它允许客户端将处理指定为是必须执行的还是可选的。
如果mustUnderstand被设