赞
踩
本来这第二篇打算讲解“开发第一个基于XFire的webservice”的内容来着。但是想想。开发实例只是局限于了会用的层面上。如果想真正的理解webservice还是需要挖掘其原理。所以本篇文章我想还是和大家一起来学习一下webservice的原理吧。知其原理,应用直接就是小case了。在学习webservice的原理之前。我想还是有必要弄清另一个概念—SOA.这个概念在很多学术论文和文章中经常和webservice一起被提起。刚开始我一直不理解这两个概念的关系。所以我们先来看一下SOA.
SOA是英文Service-OrientedArchitecture,即面向服务架构的缩写。在有关书籍中他是这个定义的:SOA指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。从这个定义中定义者希望表达的前提有下面两点:
1)软件系统架构:SOA不是一种语言,也不是一种具体的技术而是一种软件系统架构,它尝试给出在特定环境下推荐采用的一种架构,从这个角度上来说,它更像一种模式(Pattern)。因此它与很多已有的软件技术比如面向对象技术,是互补的而非互斥的。它们分别面向不同的应用场景,用来满足不同的特定需求。
2)SOA的使用范围:需求决定同时也限制功能。SOA并不是包治百病的万灵丹,它最主要的应用场合在于解决在Internet环境下的不同商业应用之间的业务集成问题。
从上面的定义其实我们不难发现。其实webservice简单来说就是SOA的一种体现形式。下面我们来看一下有关webservice的原理解释
WebService是一种跨编程语言和跨操作系统平台的远程调用技术
所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一个对象的方法,譬如,银联提供给商场的pos刷卡系统(采用交互提问的方式来加深大家对此技术的理解)。
远程调用技术有什么用呢?商场的POS机转账调用的转账方法的代码是在银行服务器上,还是在商场的pos机上呢?什么情况下可能用到远程调用技术呢?例如,amazon,天气预报系统,淘宝网,校内网,百度等把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能,这样扩展了自己系统的市场占有率,往大的概念上吹,就是所谓的SOA应用。
所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。
除了WebService外,常见的远程调用技术还有RMI(Remotemethodinvoke)和CORBA,由于WebService的跨平台和跨编程语言特点,因此比其他两种技术应用更为广泛,但性能略低。
WebService使用SOAP协议实现跨编程语言和跨操作系统平台
WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议(simpleobjectaccessprotocol,简单对象访问协议)。
SOAP协议=HTTP协议+XML数据格式
SOAP协议是基于HTTP协议的,两者的关系就好比高速公路是基于普通公路改造的,在一条公路上加上隔离栏后就成了高速公路。商店的服务员只要收到了钱就给客户提供货物,商店服务员不用关心客户是什么性质的人,客户也不用关心商店服务员是什么性质的人。同样,WebService客户端只要能使用HTTP协议把遵循某种格式的XML请求数据发送给WebService服务器,WebService服务器再通过HTTP协议返回遵循某种格式的XML结果数据就可以了,WebService客户端与服务器端不用关心对方使用的是什么编程语言。
HTTP协议和XML是被广泛使用的通用技术,各种编程语言对HTTP协议和XML这两种技术都提供了很好的支持,WebService客户端与服务器端使用什么编程语言都可以完成SOAP的功能,所以,WebService很容易实现跨编程语言,跨编程语言自然也就跨了操作系统平台
WSDL文件
好比我们去商店买东西,首先要知道商店里有什么东西可买,然后再来购买,商家的做法就是张贴广告海报。WebService客户端要调用一个WebService服务,首先要有知道这个服务的地址在哪,以及这个服务里有什么方法可以调用,所以,WebService务器端首先要通过一个WSDL文件来说明自己家里有啥服务可以对外调用,服务是什么(服务中有哪些方法,方法接受的参数是什么,返回值是什么),服务的网络地址用哪个url地址表示,服务通过什么方式来调用。
WSDL(webservicedescriptionlanguage)是基于XML格式的,它是WebService客户端和服务器端都能理解的标准格式,其中描述的信息可以分为what,where,how等部分!Ø
WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:
1.注册到UDDI服务器,以便被人查找
2.直接告诉给客户端调用者,例如,在自己网站给出信息或邮件告诉。
WebServices体系架构
下面我们就来看一下WebServices的体系结构--面向服务的体系结构。如图:
WebServices的体系结构
从上图可以看出,SOA结构中共有三种角色:
(1)Serviceprovider:服务提供商,发布自己的服务,并且对使用自身服务的请求进行响应。
(2)Servicebroker:服务注册中心,注册已经发布的Serviceprovider,对其进行分类,并提供搜索服务,这是可搜索的服务描述注册中心,服务提供者在此发布他们的服务描述。在静态绑定开发或动态绑定执行期间,服务请求者查找服务并获得服务的绑定信息(在服务描述中)。对于静态绑定的服务请求者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发送给服务请求者。同样,服务请求者可以从服务注册中心以外的其它来源得到服务描述,例如本地文件、FTP站点、Web站点、广告和服务发现(AdvertisementandDiscoveryofServices,ADS)或发现Web服务(DiscoveryofWebServices,DISCO)。
(3)ServiceRequester:服务请求者,利用Servicebroker查找所需的服务,然后使用该服务
SOA体系结构中的组件必须具有上述一种或多种角色。在这些角色之间使用了三种操作:
(1)Publish操作:使ServiceProvider可以向ServiceBroker注册自己的功能及访问接口
(2)Find操作:使ServiceRequester可以通过ServiceBroker查找特定种类的服务。
(3)Bind操作:使ServiceRequester能够真正使用Serviceprovider。
为支持结构中的三种操作(publish、find和bind),SOA需要对服务进行一定的描述,这种服务描述(ServiceDescription)应具有下面几个重要特点:首先,它要声明Serviceprovider的语义特征。Servicebroker使用语义特征将Serviceprovider进行分类,以帮助具体服务的查找。Servicerequester根据语义特征来匹配那些满足要求的Serviceprovider。(因此,语义特征中重要的一点就是对Serviceprovider的分类。)其次,服务描述应该声明接口特征,以访问特定的服务。最后,服务描述还应声明各种非功能特征,如安全要求,事务要求,使用Serviceprovider的费用等等。接口特征和非功能特征也可以用来帮助Servicerequester对Serviceprovider的查找。
Web服务的构件
WebServices的构件可以通过下图给出了清晰的描述。
webServices构件模型
(1)服务在这里,Web服务是一个由服务描述来描述的接口,服务描述的实现就是该服务。服务是一个软件模块,它部署在由服务提供者提供的可以通过网络访问的平台上。服务存在就是要被服务请求者调用或者同服务请求者交互。当服务的实现中利用到其它的Web服务时,它也可以作为请求者。当然更为重要的是:我们需要发现服务,这就要借助UDDI等技术来完成。
(2)服务描述服务描述包含服务的接口和实现的细节。其中包括服务的数据类型、操作、绑定信息和网络位置。还可能包括可以方便服务请求者发现和利用的分类及其它元数据。服务描述可以被发布给服务请求者或服务注册中心。Web服务体系结构解释了如何实例化元素和如何以一种可以互操作的方式实现这些操作。这一部分是通过WSDL——WebServices描述语言来实现。
(3)消息格式这部分通常指的就是WebServices的内容需要进行展示所要支持消息格式,它用SOAP——简单对象访问协议,即在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议。
(4)编码任何发布出去的WebServices都要求以XML文件的形式,展现给用户或请求者,因为XML相当于另一个层面上的接口,不同的商家或单位都可通过将提供商发布的基于XML的WebServices数据提取出来,然后与自己的相关系统或软件产品集成,也就相当于提供商实现WebServices的同时也会使用者定义了一个标准。
(5)传输这一部分就是计算机网络的应用,即提供商的WebServices最终会以什么渠道传输,比如:HTTP、SMTP等。
推荐阅读:一步一步学习webservice(三)开发第一个基于XFire的webservice
参考:http://blog.csdn.net/eefesa/article/details/1890094
------------------------------------------------------------------------------------------------------------
《Java程序员由笨鸟到菜鸟》电子版书正式发布,欢迎大家下载
http://blog.csdn.net/csh624366188/article/details/7999247
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。