SOAP 摘要简单对象访问协议

来源:互联网 发布:liwo007软件下载 编辑:程序博客网 时间:2024/04/30 20:51
SOAP  摘要简单对象访问协议  (SOAP)  通过一种基于XML的、和平台无关的方法规划网站,从而提高Internet的交互性。绪论  Internet正在从根本上改变着计算,从而根本上改变了商业实现的方式。向电子商务的过渡在所有的计算机系统中导致了巨大的波浪反应。随着公司将它们的客户管理、订单实现系统和它们的在线销售系统综合,网站的作用将越来越小。下一步综合将延伸到商务伙伴之间,如供应商和发行商之间。除了通过Internet综合各种商务系统外,还有另外一些推动网络发展的、与服务相关的现象。例如,用户需要更丰富、更深、更个性化和更主动的服务,服务于他们的工作或个人生活,这是为他们的利益服务的,同时可以节约他们的时间、金钱和困难。结果,网络正从一个由一些网页提供简单服务的网站方式发展到动态Web服务,可以交互执行一些复杂的步骤,为用户提供服务。这些任务可能需要一个Web服务调用另外的Web服务,像一个传统的软件程序一样调整步骤执行命令。今天所面临的问题是和其他服务的综合以及和其他设备连接仍然是困难的,因为还缺少一些互相联络的工具和通用协定。网络所需要的是一种能够将所有服务结合起来的一般方法。多个服务能够一起无缝地工作,必须能够容易地协调Internet上的各个服务步骤,容易地创建新的和用户化的服务。开发人员必须能够综合,而不仅仅是提供服务。他们需要能够从任何软件组件、应用程序、商务进程、设备或其他知识产权的组合中形成解决方案。这需要一个共同的目标使得在Internet上任何地方的开发人员能够一起工作—这是新的应用程序模型,为分布式组件以快速、可靠的方式连接分布式服务和组件提供核心的编程服务。以前,创建这类复杂的应用对应用的通讯是使用一个对象模型,例如Microsoft的DCOM或Object  Management  Group的Internet  Inter-ORB协议  (IIOP)或Common  Object  Request  Broker  Architecture  (CORBA)。但是这些技术在创建Web服务的时候具有一些不足。具体地说,DCOM和IIOP/CORBA是复杂环境,意味着用它们实现的应用程序通常是复杂的和均匀的。换句话说,使用它们创建分布式应用程序,通常需要在连接的两端都运行相同的分布对象模型。但是Internet并不保证和你连接的另外一端运行特定的客户和服务软件,如HTTP。并且要让每个人都运行IIOP或COM是不切实际的,在技术上也是不可实现的.  解决这个问题的一种方案是使用已有的Internet标准:  HTTP  and  XML。超过其他任何一种应用程序协议,超文本传输协议连接了整个世界。几百万个网站和浏览器已经证明了这一点。如果你没有一个e-mail客户端软件,你可以通过一个网站来使用e-mail;  如果你想使用其他的不同于HTTP的技术来连接到Internet,  你将会发现大部分其他的应用程序协议最多是可以容忍的,并且通常会被防火墙阻挡在外面。单独使用HTTP的问题是它主要是一个服务器到客户端传输文件的机制。为了创建更好的Web服务,你需要扩展HTTP。SOAP更好满足了这个要求:它加入了一套HTTP标题和一个丰富XML,能够在Internet上实现复杂的应用和应用的通讯。  SOAP做什么和不做什么  SOAP通讯协议使用HTTP来发送XML格式的信息。SOAP规范的定期目标包括两个层次:  提供一个Internet标准的标准对象调用协议,通过HTTP进行传输,数据编码成XML格式。  创建一个可扩展协议和有效载荷(payload)格式,  能够随时间升级。这个规范的作者明确地将创建对象模型更辣手部分以及已经创建好的部分排除在外。他们指出他们不想“定义一个分布式对象系统的所有方面”。这意味着不存在分布式的垃圾堆积、类型安全或版本、没有双向的HTTP通讯、没有消息传输或管道进程、没有参考对象以及没有激活对象。SOAP意味着简单—可以被一个开发人员在几天的时间内使用任何编程语言在任何操作系统上完成。这些虽然不是SOAP本身的目标,但它们可以在SOAP的环境中实现—不仅仅是SOAP。它们需要你通过任何可用的工具自己创建。  SOAP定义  SOAP定义了一种在HTTP客户端和服务器端传输命令和参数的机制。SOAP不关心什么操作系统、编程语言或在服务器端或客户端使用的对象模型:除了需要使用HTTP传输外,与其他无关。  SOAP是简单的。客户端发送一个请求给服务器,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。  SOAP通过已有的Internet下层结构来工作。你不需要作任何工作,它符合任何路由器、防火墙或代理服务器。  SOAP客户请求封装在一个HTTP  POST  (或M-POST)包中。下面的例子摘自Internet-draft规范说明中:  POST  /StockQuote  HTTP/1.1  Host:  www.stockquoteserver.com  Content-Type:  text/xml  Content-Length:  nnnn  SOAPMethodName:  Some-Namespace-URI#GetLastTradePrice  <SOAP:Envelope  xmlnsOAP="urnchemas-xmlsoap-orgoap.v1">  <SOAP:Body>  <m:GetLastTradePrice  xmlns:m="Some-Namespace-URI">  <symbol>DIS</symbol>  </m:GetLastTradePrice>  </SOAP:Body>  </SOAP:Envelope>  第一个四行是标准的HTTP:  POST是HTTP的动词,所有的HTTP消息都需要主机。Content-Type和Content-Length部分是所有包含  payload  的HTTP消息所需要的。Content-Type  "text/xml"表示payload是一个发送给服务器的XML消息(或者是发送一个具有扫描应用程序头功能的防火墙的消息)  XML代码是易懂的,比如:Envelope和Body部分规定了普通  payload打包机制;  <GetLastTradePrice>  部分包括一个被称为<符号>的部分,其中包含了股票交易的符号。这个请求的目的是非常明显的:得到某个特定股票的最后一次交易价格—本例子中是Disney(DIS)。发送这个消息的程序仅仅需要知道如何格式化一个SOAP请求:  构成一个请求所需要的HTTP头格式和XML  格式。本例子中,程序知道需要形成是一个股票价格的请求。接受这个消息的HTTP服务器通过这个HTTP头SOAPMethodName知道这是一个SOAP请求;然后服务器发送或处理消息的相应部分。  SOAP说明  SOAP定义了两种类型的消息,请求和响应,从而允许客户端能够递交一个远端请求,允许服务器端能够响应这些请求。上面所举的是一个请求的例子;下面列举了对该请求的响应:  HTTP/1.1  200  OK  Content-Type:  text/xml  Content-Length:  nnnn  <SOAP:Envelope  xmlnsOAP="urnchemas-xmlsoap-orgoap.v1">  <SOAP:Body>  <m:GetLastTradePriceResponse  xmlns:m="Some-Namespace-URI">  <return>34.5</return>  </m:GetLastTradePriceResponse>  </SOAP:Body>  </SOAP:Envelope>  最前面的三行仍然是标准的HTTP:第一行表明这是对前面的POST请求的一个响应,第二行和第三行指出了内容类型和长度。  XML头封装了一个SOAP的payload。XML的<GetLastTradePriceResponse>部分包含了对一次交易价格请求的响应;它的子部分<return>表明了返回这个请求的值。  SOAP说明的关键部分是它所调用的HTTP动词POST  和M-POST、附加的  HTTP头、和XML所需要的名称空间,从而避免在不同环境可能由于复制所带来的错误。这个说明还详细表明了SOAP所调用的方法和所处理的数据类型。如果你还感到困惑,M-POST动词是来自HTTP  Extension  Framework  Internet设计的。在这个设计中定义了一个新的HTTP动词是如何在已有动词的基础上通过加入字符"M-"来创建的。  接收包含有这些动词的请求,服务器必须按照这个动词作出相应的响应。如果一个POST操作失败了  (比如,被防火墙阻挡),SOAP说明将会建议你再使用M-POST试一次。这使得SOAP处于出现错误可以替换的状态,但是不需要防火墙来完成任何扩展的功能。  SOAP和对象模型  SOAP不需要任何对象模型,也不需要通过其他的通讯实体来使用对象模型。在避免对象模型的基础上,SOAP将大部分对象功能  (如初始化代码和垃圾堆积)留给客户端和服务器端工作的底层,同时其他功能(如信号编辑)则可以留给SOAP综合已有的应用程序和底层结构来完成。  SOAP可以使用任何语言来完成,只要客户端发送正确SOAP请求  (也就是说,传递一个合适的参数给一个实际的远端服务器)。SOAP没有对象模型,应用程序可以捆绑在任何对象模型中。早期实现SOAP功能的有Java,  Perl,  和Windows版本。当将每个功能变为SOAP实体能够理解的参数和响应后  (例如,数据保存在一个XML元素中,并封装在HTTP消息中),它就可以和其他的SOAP功能交互作用。  使用SOAP编程使用SOAP编程有两种不同方式,决定于是否SOAP已经存在于你的底层结构中  (比如,通过CORBA部分完成或将其置入你的操作系统中)或你是否自己创建SOAP底层结构。为SOAP创建底层结构使用SOAP不需要创建分布式对象;毕竟,SOAP本身就是设计出来通过网络从一个对象发送消息到另一个对象的,不依靠于任何  消息来去对象。在理论上说,这意味着通过判断到达服务器的数据类型(从客户端请求)和需要发送的数据类型(对请求的响应),可以在系统之间创建一个SOAP界面。举一个简单的例子,对于一个SOAP-enabled的体温计:它只接收一个消息,  <GetCurrentTemp>  并且只返回一个值<CurrentTemp>。其他的任何信息将被忽视。对于一个自动调温器:你可以使用<GetCurrentTemp>调用,也可以使用  <GetCurrentSetting>调用,这将返回自动调温器的当前设置。加入<SetTemp>功能,这时你已经完成了一个非常使用的应用。一个应用程序是否象那个SOAP-enabled  自动调温器那样相对简单或相当复杂  (比如,一个将一个大航空公司的工程、市场和目录的系统和它的供应商相连接的应用),都需要底层的支持,这样才能发送、接收和理解相关的SOAP消息。为特定目的而开发的企业应用可以从SOAP中得到好处,使用SOAP来创建一般解决方案可能性甚至更加激动人心。服务提供商可以给需要特定服务的用户提供"无特性的"的建筑材料。举一个例子,对于客户认证和为用户跟踪信用卡和交付信息的问题:安全、可靠和正确地实现这个功能是一个重要的任务,对于那些小的交易来说更是如此。一个应用服务供应商  (ASP)  使用SOAP可以为客户认证、付款和交付创建一个通用解决方案,然后出售或提供这个服务。这类的服务适合于任何平台,并且允许ASP客户通过简单地将图标拖放到一个网站上,从而实现和这个网站的电子商务。  ASP的客户在初始化服务的时候就可以回答一些问题(或者,这些问题在客户系统设置好和ASP实体进行通讯的时候能自动解决)。一个设置好,服务将实现在ASP客户的网站上,并且好象是那个网站的一部分。当客户单击网站上的购买按钮,服务将启动:首先得到所需的任何客户信息,然后发送这些信息给ASP进行处理,并且通知服务用户系统交易已经被认可。  SOAP使本次操作的所有人员平稳操作成为可能  (终端客户进行一次购买操作,网络零售商卖出,ASP则为客户认证提供"掩藏"服务),人员可以使用任何平台。零售商可能需要从ASP那里得到一些代码运行在它的网站上;在客户初始化一次交易时,这些代码将调用在ASP处运行的其他例程  结论虽然DCOM支持者和CORBA支持者之间在那个对象结构应该成为台式机、大型机和网络标准的问题上进行了数年的争论,但是它们对于对方指出的不足没有任何改善。SOAP则为它们提供了和解的机会:任何人既能够坚持使用其喜欢的模型,也能和其他人进行交互  作用。最后,SOAP说明  已经作为一个Internet-Draft递交给IETF。由于SOAP是一个简单协议,整个交互作用中可以低价实现SOAP。