SOAP

来源:互联网 发布:浙江软件考试费用 编辑:程序博客网 时间:2024/04/28 00:08

浅谈SOAP 

本文对SOAP作了一个初步介绍,给出几个简单示例;接着比较CORBA,DCOM/COM与SOAP的联系与区别;然后浅析SOAP简单的理解为RPC+HTTP+XML时的运行机制;最后展现SOAP的前景。

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

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

今年四月份的时候,W3C联盟召开了第一次 Web 服务专题研讨会,目的为探索 W3C 应向哪个方向发展才能实现新兴的 Web 服务架构的标准化,期间提出了一个"Web 服务堆栈"的构想,如下图,从图中可以看出,SOAP在WEB服务堆栈中作为用于 XML 消息传递的一种非常普遍的协议,发挥着十分重要的作用。





 

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))。

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刚刚提出来的时候,许多人就提出了疑问:SOAP与CORBA和DCOM的区别何在?

  1. 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 提供者而进行通讯。
  2. COM/DCOM(Component Object Model / Distributed Component Object
    Model )是微软公司提出的分布式组件对象模型标准,支持在局域网、广域网甚至Internet上不同计算机的对象之间的通讯。DCOM基于COM的应用程序、组 件、工具等的基础之上,处理网络协议的低层次的细节问题,而不必关心太多的网络协议细节,从而使用户能够集中精力解决用户所要求的问题。DCOM位于应用 程序的组件之间,将组件以不可见的方式胶合在一起组成具有完整功能的应用程序。
  3. SOAP 与CORBA,DCOM/COM的比较。

    3.1 首先指出的是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)正在关注这方面的发展。

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

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

    3.4 尽管CORBA可以在不同的平台上执行,DCOM可以在微软的各种平台上运行,但是基于CORBA和DCOM的解决方案必须依赖于单一的应用程序。比如 说,假如运行的是DCOM服务器程序,所有的分布式的客户端不得不运行于微软的操作平台上。CORBA 虽然可以运行于不同的平台,但CORBA的互操作性并没有在更高层的服务上进行扩展,如安全性和事务处理,在这种情况下,许多提供的服务没有得到很好的优 化。DCOM和CORBA适合于服务器--服务器间的通讯,但是对于客户端--服务器的通讯十分脆弱,尤其当客户程序分布在INTERNET上更是如此。

    3.5 SOAP不象DCOM一样试图定义分布式系统的所有元素,SOAP没有提供分布式类库,类型安全检查,版本控制等等,SOAP比它处于一个更低的层次,有 点类似于IIOP在CORBA的作用,DCOM却提供了一些额外的协议功能,是IIOP 或者SOAP所不具备的。然而,许多. DCOM的额外功能只有在服务器��服务器间通信时才会用到,对于客户端��服务器之间的通信则是多余的。





       

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应答传给客户端。





   

W3C于2000年5月8日发表了Simple Object Access Protocol (SOAP) 1.1版本,具体规范发布在下列站点上( http://www.w3.org/TR/SOAP/)。又与今年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的开发,去年 IBM公司 和 Microsoft公司 都发行了实现 SOAP 的第一批版本。 IBM 公司启动了Apache SOAP 项目计划,微软最近又推出了SOAPtoolkit2.0的正式版,主要包括如下的一些特征:SOAP的高层接口和低层接口,消息对象接口,完全支持 WSDL 1.1标准,支持用户自定义类型映射,并且提供了丰富和完整的开发文档以及应用实例。而且,两家公司正在互操作性方面努力研究。可以乐观的估计,不用多 久,SOAP 互操作性的时代就将来临。

  1. HTTP 1.0 or greater( http://www.w3.org/Protocols/HTTP/ietf-http-ext)
  2. the core W3C XML recommendation( http://www.w3.org/TR/1998/REC-xml-19980210)
  3. W3C XML namespace recommendation( http://www.w3.org/TR/REC-xml-names).
  4. XML Schema( http://www.w3.org/TR/xmlschema-1/)
Organization Product 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.
  • http://www.cn.ibm.com/developerworks/xml/index.shtml(IBM公司)

  • http://msdn.microsoft.com/(微软公司)

  • http://www.w3.org/TR/soap12/(W3C联盟)

  • http://www.soaprpc.com/

  • http://www.webservices.org

  • http://www.soapwebservices.com

  • http://www.xml.org.cn(中国xml联盟)

鉴于SOAP是当前的新技术,国内资料贫乏,主要参考了国外的一些资料及IBM和MICROSOFT的相关资料,文章偏颇之处,请多指教!


什么是SOAP
SOAP:简单对象访问协议
(SOAP:Simple Object Access Protocol)

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

SOAP 包括三个部分:
SOAP 封装:它定义了一个框架 , 该框架描述了消息中的内容是什么,谁应当处理它以及它是可选的还是必须的。
SOAP 编码规则:它定义了一种序列化的机制,用于交换应用程序所定义的数据类型的实例。
SOAP RPC 表示:它定义了用于表示远程过程调用和应答的协定。

   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-ENV:Envelope>

  示例 1 : 内嵌在 HTTP 请求中的 SOAP 消息

POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

  下面是一个包含将 SOAP 消息作为负载的 HTTP 应答消息。

  示例 2 : 内嵌在 HTTP 应答中的 SOAP 消息

HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn

<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>


什么是SOAP?
  
         1.SOAP也被称作XMLP,为两个程序交换信息提供了一种标准的工作机制。在各类机构之间通过电子方式相互协作的情况下完全有必要为此制定相应的标准。
  
   交换信息可以采用很多方法,比如电子邮件、即时聊天和远程过程调用(RPC)等。电子邮件和聊天消息通常不具备计算机友好性。计算机可以读取电子邮件报 头,但是其类型内容却无法得到计算机这个"硅脑袋"的理解。即时聊天和RPC也面临同样的尴尬情况:计算机倒是可读可人又没法读了。
  
   计算机确实知道如何理解XML。SOAP描述了把消息捆绑为XML的工作方式。它还说明了发送消息的发送方、消息的内容和地址以及发送消息的时间。这也 是为什么把SOAP叫做一种协议的原因。SOAP并没有同电子邮件协议(SMTP)、RPC(套接字和IDL)或者Web协议(HTTP)截然分开。 SOAP要利用这些系统作为消息的起点。
  
  2.SOAP是Web Service的基本通信协议。因为SOAP与DCOM和CORBA在概念上有相同之处,所以很多人在问:"SOAP是怎样激活对象的?"或"SOAP在 使用什么命名服务(Naming Service)?"。或许在执行SOAP的过程当中会用到这些,但这些并不在SOAP规范要考虑的范畴之内。SOAP只是定义SOAP消息的XML格式 (XML Format),如果你用一对SOAP标记(SOAP Elements)把XML文档括起来,那么这个就是一个SOAP消息,这不是很简单吗?
  
  3.SOAP规范还定义了怎样用XML 来描述程序数据(Program Data),怎样执行RPC(Remote Procedure Call)。这些可选的规范是为了构建RPC-style的应用程序(客户端SOAP消息包含函数名和在函数中用到的参数,而服务器端SOAP消息包含执 行函数之后的结果)。大多数SOAP解决方案都支持RPC-style应用程序,因为很多程序员已对DCOM或CORBA熟悉。SOAP还支持 Document-style应用程序(SOAP消息只包含XML文本信息)。Document-style应用程序有很好的灵活性,所以很多用RPC很 难构建的Web Service用这种方式构建。
  
  
  
  
  1.最后SOAP规范还定义了HTTP消息是怎样传输SOAP消息的。这并不代表SOAP只能用HTTP来作为传输协议,MSMQ、SMTP、TCP/IP都可以做SOAP的传输协议。
  
   很多大公司根据SOAP规范,都开发出了自己的SOAP解决方案。这些解决方案都是相对于某种语言。比如说Microsoft SOAP toolkit2.0把COM函数转换成SOAP消息,而Apache toolkit把JAVA函数转换成SOAP消息。这样难免带来一些兼容性问题。
  
  现在SOAP的很多另人瞩目的特性已成为现实(SOAP已经运行于不同的硬件和软件平台),而且有70多个解决方案。之所以SOAP被人们所爱戴,是因为SOAP比其他同类技术(CORBA、DCE)简单易用。
  
   安全性对于应用程序来说是很重要的。那么SOAP的安全性如何呢?对于把HTTP作为传输协议的SOAP来说是没有问题的,因为HTTP协议已经有很好 的安全构架。那么用其他传输协议会出现安全问题吗?不是的,你不必担心,因为已经有这方面的规范了(http: //msdn.microsoft.com/library/default.asp?url=/library/en-us/dnglobspec/html/ws -security.asp)。
  
  2.簡易物件存取協定
  
  Simple Object Access Protocol (SOAP)
  
  作者: 恆逸資訊 胡百敬
  
  什麼是簡易物件存取協定(SOAP),簡而言之就是利用現存的網際網路架構讓應用程式之間可以彼此溝通,而不會被防火牆阻礙。在分散式的架構下,使用 XML 的環境中,SOAP提供兩個電腦系統之間交換的架構與資料型別。
   在過去五年來透過網際網路存取已經變成是較進步社會的基礎需求。在其上執行著各式各樣的通訊協定。但是直至目前為止最廣泛被接受的通訊協定依然是 Hypertext Transfer Protocol(HTTP),它是瀏覽器與Web伺服器之間溝通時使用,對於文字、圖形以及其他資訊的傳輸很有效率與彈性,而且它簡單易懂。
   你我所撰寫的應用程式利用網際網路在遠端互動已經變得越來越重要。現今在網際網路上提供eService已經是大勢所趨。舉個例子來說,你可能在某一家 網路公司所提供的行事曆上註冊,當快遞公司要送貨品給你時,它的系統會自動與提供行事曆的網路公司合作,查閱你的在家的時間,自動排定送貨的行程。或著是 你想寫一個入門網站,但覺得某個網站所提供的交通資訊或是天氣預報系統很好,你想直接讓你的使用者透過系統之間的合作,可以在你的網站線上查詢別的網站上 這些資料。而那些提供服務的網站也可以查詢的次數向你收費。
  以上這些動作都需要系統自動完成合作,不再有人工參與。且彼此的系統是各自以他所熟悉的技術完成,這代表著系統不會遵循特殊的架構。有可能我的系統是Win32,使用的是COM+﹔而你的是UNIX作業系統,利用CORBA提供服務。
   讓兩個系統透過網際網路溝通,僅僅用HTTP通訊協定本身提供的功能是不夠的,雖然HTTP本身的彈性很大,但它基本的設計並不適合呼叫遠端的程式物 件。這種互動在區域網路內一般是使用Remote Procedure Call(RPC),也就是使用者端傳出一些參數,並由伺服端回傳一些結果。
   現今已有許多分散式物件通訊協定(distributed object protocols) 提供遠端程式間的溝通。例如微軟的Distribured Component Object Model(DCOM)、Object Management Group的Internet Inter-ORB Protocol(IIOP)等等。所有這些服務都提供相同的服務,也就是讓使用者端可以觸發RPC到伺服端應用程式,並接到回傳結果。 在企業內部網路(Intranet)上使用分散式物件傳輸協定有很好的效果。但在公眾的網際網路上使用這些協定就有很多問題。任何連上網際網路的伺服器基 本上都可以被任何網際網路的使用者存取,這導致需要較嚴謹的安全考量。為了安全,大部分的企業都在它們內部與外部網路之間加裝防火牆以防止網際網路上的大 眾存取企業內部的伺服器。這些防火牆,例如微軟的Proxy伺服器,可以經由條件設定以阻止一些想進企業內部來的公眾網路需求,這可以大幅提昇內部系統的 安全。
  雖然防火牆是提供接上網際網路安全的基礎機制,但它卻會降低分散式物件通訊協定的使用效能。為了要解決這個問題,有識之士紛紛提出 了各自的解決方案。在 1998 年,UserLand 公司的執行總裁 Dave Winner 提出透過 XML 讓 RPC 的通訊方式透過 HTTP 協定在網際網路上執行。
  這個想法經由微軟公司加以改良,提出了實際可行的Simple Object Access Protocol(SOAP)通訊協定。現今正在W3C審議中,已經有IBM等大廠表態支持。不久的未來即將可能成為在網際網路上提供電子服務的標準協定。
   SOAP是一個像DCOM或其他分散式物件通訊協定的協定,讓使用者端與伺服端的RPCs可以溝通。但與其他類似協定不一樣的地方是,它支援防火牆的使 用。同樣重要地,SOAP不是只設計用來針對某種物件技術的協定,它不像一些時下的分散式物件通訊協定會被綁死在某一種特定的物件規格上,這個協定將可以 被任何的物件使用。所以它將是兩大物件陣營COM 和 CORBA 最好的溝通橋樑,讓彼此的物件程式可以跨平台透過網際網路呼叫。
  簡易物件存取協定如其名稱所言,要求定義要"簡易",所以它只訂出物件溝通基礎規範,如
  讓物件透過網際網路提出需求的方式標準化,以 HTTP 當傳輸的方式,以 XML 描述溝通的內容
  建立可延伸的傳遞物件呼叫格式的承載 但它不定義一些一般分散式物件系統需要定義的
  分散式系統資源回收(garbage collection)
  雙向的 HTTP 溝通
  物件參照
  物件初始化
  以上這些不明確定義的規格都交由各系統廠商自行實作。
  
  
  使用防火牆所造成的問題以及 SOAP 所提供的解決方案
  
   要了解為何防火牆會造成分散式物件通訊協定的問題必須先了解到防火牆是如何分辨協定之間的不同。在TCP/IP的架構下,每一個被廣泛使用的協定都被賦 予一個特殊的埠號(port number)而每一個使用該協定的需求封包都帶著這個埠號。例如HTTP協定的埠號是80、FTP是21等等。大部分的防火牆可以用來防止某個特殊協定 的方式就是針對埠號拒絕某種協定的通訊。通常防火牆是被設定成允許埠號80的運作的-如果該公司不拒絕使用HTTP的話。
  但大部分的防火 牆會擋住其他的埠,因為它們假定利用其他的埠對公司內部網路的運作都是有危險的。 但這也正是造成分散式物件通訊協定無法運行的原因。不像HTTP、FTP等其他著名的通訊協定,分散式物件通訊協定通常沒有使用一個著名的大家都知道的埠 號來溝通。相反地,這些通訊協定通常動態地被賦予埠號,埠號碼在被需求時任意產生。如果沒有防火牆擋在使用者端與伺服端之間,這種方式將可以很有效地運 作。但若加了防火牆,則該通訊協定會因為防火牆不允許兩端任意使用任何埠號來溝通而中斷。
  當下存在很多種解決方式,例如某些防火牆可以被 設定成允許某個範圍的埠號碼可以進行溝通。若該分散式物件通訊協定也可以被設定成只用這個範圍的埠號碼,則這個方案便可行,使用者端與伺服端之間可以進行 溝通。但比較注重安全的網路管理者將不會贊成開放任意一組埠號碼而導致這個方案並不完美。另一個選擇是採用COM網際網路服務,這讓傳統的DCOM封包在 TCP上透過埠號80來傳遞。這在某些方面很有用,但這項技術只有微軟的Internet Information Server和DCOM在使用,而不是一項完整的解決方案,所以我們需要一個更普遍一般性的解決方案。
  因為幾乎所有的防火牆都允許透過埠 號80來溝通,所以透過埠號80來溝通的分散式物件通訊協定將是一個較好的方案。但這並不是說說那麼容易,因為埠號80已經被設定給HTTP協定。所以 SOAP這個分散式物件通訊協定是架在HTTP協定之上的。HTTP通訊協定相當簡單,僅僅以少數基礎的動詞所組成,如GET、PUT、POST等等,而 這些動詞在瀏覽器與伺服器之間傳遞。而每一個動詞之後跟著一些資訊,而這些資訊通常以簡易的字串方式傳遞。

原创粉丝点击