使用WSDL部署WebService

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

简单对象访问协议(SOAP)提供对远程对象的访问。这些对象有的是简单的JavaBeans组件或者是企业JavaBeans组件和COM/COM+对象等。这些对象驻留在不同企业内部并且可能存在于因特网的任何位置。因此,SOAP通过因特网进行通信,它是一种在不同企业间交换信息的机制。在本文中,Bial会详细的讨论SOAP通信,对象是怎样用SOAP发布其功能的,怎样调用SOAP对象,怎样在有SOAP意识的应用程序间交换信息。他还会展示第1部分中提到的WSDL应用程序的SOAP服务部署,以及远程服务器对它的调用。SOAP和WSDL我在本系列文章的第1部分介绍了WSDL。WSDL描述了Web服务的接口。Web服务所有者将用SOAP来实现他们的接口。因此,WSDL服务实际上作为SOAP服务一样存在。一旦Web服务用户拥有WSDL文件,他或者她就知晓接口的细节。他或者她就会用SOAP来与Web服务通信。可以把Web服务考虑为对象,可以通过WSDL接口公开并且使用SOAP通过因特网远程访问。既然服务是对象,那么肯定有每种服务的相关属性和每种服务调用的行为。SOAP消息是XML文档,可通过HTTP工作。为什么用SOAP?B2B(Business-to-business)和A2A(application-to-application)需求表明企业之间为交换信息而相互通信。这种概念被用在B2B、工作流和跨企业集成中。例如,设想一条垂直供应链,在链上一家企业为了满足它的客户需求而需要调用其提供者的服务。而一些提供者需要沿供应链进一步下行来调用其它企业的服务。很明显,在此应用程序中互操作性是最为重要的。任何单个企业只能实现SOAP通信通道的一端。另一端将是因特网上任何地方的实体。在最近几年里,企业之间的集成和互操作性已经成为软件工程师和企业的一个挑战性任务。平台相关性也成为取得集成和互操作性的一个大问题。SOAP依然是在企业间取得集成和互操作性最简单的机制。SOAP体系结构有了对SOAP和它的用途的基本理解,我现在就展开对其体系结构的讨论以了解一些深层知识。请参阅图1,在此图里面您可以识别典型SOAP通信体系结构中的一些组件:SOAP客户机SOAP服务器实际服务图1.一个典型SOAP通信体系结构的组件让我解释上面所提到的每个实体的体系结构角色。下面的讨论参照图1。SOAP客户机SOAP客户机是一台有SOAP机制的机器,它可以产生SOAP请求并通过HTTP发送到服务器。一条SOAP请求是一种类型的SOAP消息,通常只有两种类型的SOAP消息:一条SOAP请求就是一台SOAP客户机发送给SOAP服务器的内容,一条SOAP响应就是SOAP服务器对SOAP客户机响应的内容。清单1是典型的SOAP请求,请参阅清单2来回顾SOAP响应。清单1:一条简单的SOAP请求SOAP-ENV:Envelopexmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/SOAP-ENV:Bodym:getListOfModelsxmlns:m=urireference/m:getListOfModels/SOAP-ENV:Body/SOAP-ENV:EnvelopeSOAP服务器SOAP服务器也是一台有SOAP机制的机器,能够接收来自SOAP客户机的请求,并对之作出适当的响应。这些编过码的响应会返回发出请求的SOAP客户机。在SOAP服务器内部有三个实体:服务管理器被部署服务的列表XML转换程序服务管理器负责根据请求管理服务。请参阅清单1的服务请求,在这里元素m:getListOfModelsxmlns:m=urn:MobilePhoneservice包含了服务的名称。服务管理器会读取SOAP客户机想调用的SOAP服务的名称并检查所需的服务实际上是否驻留于这台SOAP服务器上。此后,它会查询被部署服务的列表(SOAP服务器所托管的所有服务的列表)。若存在,服务管理器将把SOAP请求传送给XML转换程序。XML转换程序就负责将SOAP请求的XML结构转换成程序员用来实现实际服务的编程语言(例如,Java编程语言)的结构。还要负责将来自实际服务的响应转换回SOAP响应的XML结构。请参阅清单2获得SOAP响应的说明。清单2:一条简单的SOAP响应SOAP-ENV:Envelopexmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/SOAP-ENV:Bodym:getListOfModelsResponsexmlns:m=urn:MobilePhoneserviceModelM1/ModelModelM2/ModelModelM3/Model/m:getPriceResponse/SOAP-ENV:Body/SOAP-ENV:Envelope实际服务图1中标有actualservice的框就是实际服务驻留的位置。服务实现可以是:例如,COM组件或JavaBeans组件的形式。XML转换程序负责将XML结构转换成合适的方法调用。当XML转换程序调用了实际服务实现的某个方法时,这个方法就会完成它的工作并且将结果信息返回XML转换程序。请看一看图1中连接XMLtranslator和actualservice的箭头。箭头的两端同在一个企业内,这意味着同一个组织控制着通信两端的接口。与穿过企业边界的在SOAP客户机和SOAP服务器之间的箭头相比,这正是SOAP的目的所在。SOAP请求响应机制当SOAP客户机向SOAP服务器发送SOAP消息时,用HTTP协议传输。这就叫做SOAP与HTTP绑定。当SOAP服务器收到消息时,将消息交给服务管理器。服务管理器检查被部署服务的列表,查找在SOAP消息中所需的服务。若没有查找到所请求的服务,它将请求失败返回给SOAP客户机。但是若此项服务可以提供,控制权由服务管理器转移给XML转换程序(转换程序完成合适语言的转换并访问实际服务实现)。服务实现会处理请求并将结果返回给XML转换程序。XML转换程序将结果转换成SOAP客户机能够理解的SOAP响应(XML文档)。然后又一次用HTTP绑定来传输SOAP响应。现在让我们看一下SOAP与HTTP的绑定细节。SOAP与HTTP绑定当您将SOAP和HTTP绑定在一起或在HTTP上操作SOAP时,您实际上将HTTP报头加到了SOAP请求和响应上了。清单1是典型SOAP请求的结构,而清单3、4、5和6都是完整的HTTP请求,用来演示如何将HTTP报头添加到清单1上。相似地,清单7是一条完整的HTTP响应,针对于来自清单2的SOAP响应。无论您何时在HTTP上使用SOAP,Content-Type字段必须是text/xml。现在您可以察看清单3到清单7的详情。使用HTTP的SOAP请求您可以将SOAP和HTTP的POST请求方法连用。为了发送一条SOAPHTTP请求,您需要在HTTP中提供一个SOAPAction报头字段。SOAPAction指定了SOAP请求的目的。服务器(例如过滤HTTP中SOAP请求消息的防火墙)可以用字段SOAPAction的值来做决定。HTTP客户机在发送一条SOAPHTTP请求时必须用此报头字段。SOAPAction可以有如下几种值:SOAPAction:URI-ReferenceSOAPAction:filenameSOAPAction:SOAPAction:清单3:演示SOAPAction报头字段中的URI引用POST/VendorsHTTP/1.1Host::text/xml;Charset=utf-8Content-Length:nnnnSOAPACtion:=1.0?SOAP-ENV:Envelopexmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/SOAP-ENV:Bodym:getListOfModelsxmlns:m=urn:MobilePhoneservice/m:getListOfModels/SOAP-ENV:Body/SOAP-ENV:Envelope清单3在SOAPAction中包括如下URI引用:这个SOAPAction展示了两部分内容。第一部分是一个特别SOAP部署的地址:第二部分是一个片段标识符,它给出了我们感兴趣的方法的名字(#getListOfModels)。清单4:演示SOAPAction报头字段中的一个文件名POST/VendorsHTTP/1.1Host::text/xml;Charset=utf-8Content-Length:nnnnSOAPAction:MobilePhoneservice#getListOfModels?xmlversion=1.0?SOAP-ENV:Envelopexmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/SOAP-ENV:Bodym:getListOfModelsxmlns:m=urn:MobilePhoneservice/m:getListOfModels/SOAP-ENV:Body/SOAP-ENV:Envelope清单4在SOAPAction中包含一个文件名(MobilePhoneservice#getListOfModels)。MobilePhoneservice文件必须出现在主机URI()中。这个主机URI是在HTTP报头中host字段()和文件夹名(/Vendors)的结合。清单5:演示SOAPAction报头中的空字符串POST/VendorsHTTP/1.1Host::text/xml;Charset=utf-8Content-Length:nnnnSOAPAction:?xmlversion=1.0?SOAP-ENV:Envelopexmlns:SOAP-ENV=http://schemas.xmlsoap.org/soap/envelope/SOAP-ENV:Bodym:getListOfModelsxmlns:m=urn:MobilePhoneservice/m:getListOfModels/SOAP-ENV:Body/SOAP-ENV:Envelope清单5在SOAPAction中包含一个空字符串()。空字符串值表明SOAP的目的和HostURI()的目的是一样的。清单6:演示无值SOAPAction报头POST/VendorsHTTP/1.1Host::text/xml;Charset=utf-8Content-Length:nnnnSOAPAction:?xmlversion=1.0?SOAP-ENV

1 / 28
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功