了解和学习WebService

来源:互联网 发布:vue.js 例子 编辑:程序博客网 时间:2024/06/15 09:15
一:WebService的优点
1:跨防火墙的通信
如果应用程序有成千上万的用户,而且分布在世界各地,那么客户端和服务器之间的通信将是一个棘手的问题。因为客户端和服务器之间通常会有防火墙或者代理服务器。传统的做法是,选择用浏览器作为客户端,写下一大堆JSP页面,把应用程序的中间层暴露给最终用户。这样做的结果是开发难度大,程序很难维护。 要是客户端代码不再如此依赖于HTML表单,客户端的编程就简单多了。如果中间层组件换成Web Service的话,就可以从用户界面直接调用中间层组件,从而省掉建立JSP页面的那一步。要调用Web Service,可以直接使用Microsoft SOAP Toolkit或JAVA这样的SOAP客户端,也可以使用自己开发的SOAP客户端,然后把它和应用程序连接起来。不仅缩短了开发周期,还减少了代码复杂度,并能够增强应用程序的可维护性。同时,应用程序也不再需要在每次调用中间层组件时,都跳转到相应的“结果页”。 
2:应用程序集成
企业级的应用程序开发者都知道,企业里经常都要把用不同语言写成的、在不同平台上运行的各种程序集成起来,而这种集成将花费很大的开发力量。应用程序经常需 要从运行的一台主机上的程序中获取数据;或者把数据发送到主机或其它平台应用程序中去。即使在同一个平台上,不同软件厂商生产的各种软件也常常需要集成起 来。通过Web Service,应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用。XML Web services 提供了在松耦合环境中使用标准协议(HTTP、XML、SOAP 和 WSDL)交换消息的能力。消息可以是结构化的、带类型的,也可以是松散定义的。
3:B2B集成
企业B2B 指的是Business to Business,as in businesses doing business with other businesses,商家(泛指企业)对商家的电子商务,即企业与企业之间通过互联网进行产品、服务及信息的交换。通俗的说法是指进行电子商务交易的供需双方都是商家(或企业、公司),她们使用了Internet的技术或各种商务网络平台,完成商务交易的过程。
Web Service是B2B集成成功的关键。通过Web Service,公司可以只需把关键的商务应用“暴露”给指定的供应商和客户,就可以了,Web Service运行在Internet上,在世界任何地方都可轻易实现,其运行成本就相对较低。Web Service只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。 用Web Service来实现B2B集成的最大好处在于可以轻易实现互操作性。只要把商务逻辑“暴露”出来,成为Web Service,就可以让任何指定的合作伙伴调用这些商务逻辑,而不管他们的系统在什么平台上运行,使用什么开发语言。这样就大大减少了花在B2B集成上的时间和成本
4:软件和数据重用
Web Service在允许重用代码的同时,可以重用代码背后的数据。使用Web Service,再也不必像以前那样,要先从第三方购买、安装软件组件,再从应用程序中调用这些组件;只需要直接调用远端的Web Service就可以了。另一种软件重用的情况是,把好几个应用程序的功能集成起来,通过Web Service “暴露”出来,就可以非常容易地把所有这些功能都集成到你的门户站点中,为用户提供一个统一的、友好的界面。 可以在应用程序中使用第三方的Web Service 提供的功能,也可以把自己的应用程序功能通过Web Service 提供给别人。两种情况下,都可以重用代码和代码背后的数据。
二:WebService的缺点
1:单机应用程序
目前,企业和个人还使用着很多桌面应用程序。其中一些只需要与本机上的其它程序通信。在这种情况下,最好就不要用Web Service,只要用本地的API就可以了。COM非常适合于在这种情况下工作,因为它既小又快。运行在同一台服务器上的服务器软件也是这样。当然Web Service 也能用在这些场合,但那样不仅消耗太大,而且不会带来任何好处。
2:局域网的一些应用程序
在许多应用中,所有的程序都是在Windows平台下使用COM,都运行在同一个局域网上。在这些程序里,使用DCOM会比SOAP/HTTP有效得多。与此相类似,如果一个Java程序要连接到局域网上的另一个Java程序,应该使用Java Remoting。其实在Java Remoting中,也可以指定使用SOAP/HTTP来进行Web Service 调用。不过最好还是直接通过TCP进行RPC调用,那样会有效得多
三:WebService的概念
Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册,不是框架,也不是一种技术,而是一种跨平台、跨语言的规范。从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通     过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。对Web service 更精确的解释: Web services是建立可互操作的分布式应用程序的新平台。作为一个Windows程序员,你可能已经用COM或DCOM建立过基于组件的分布式应用程序。COM是一个非常好的组件技术,但是我们也很容易举出COM并不能满足要求的情况。Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言,在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问Web服务(Web Service)提供了一个在不同的应用和平台之间的交互操作标准。这个交互操作通过一系列基于XML的开放标准实现,包括WSDL、SOAP和UDDI等。这些标准提供了一系列通用方法来定义、发布和使用Web Service。
四:WebService的基本层次结构
XML:(Extensible Markup Language)
扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础
Soap:(Simple Object Access Protocol)
简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
WSDL:(Web Services Description Language) 
WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
UDDI :(Universal Description, Discovery, and Integration) 
是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
五:SOAP是什么?
SOAP 是一种轻量级协议,用于在分散型、分布式环境中交换结构化信息。 SOAP 利用 XML 技术定义一种可扩展的消息处理框架,它提供了一种可通过多种底层协议进行交换的消息结构。 这种框架的设计思想是要独立于任何一种特定的编程模型和其他特定实现的语义。
SOAP的概念最初来自于 Microsoft and Userland software,它已经演化了好几代; 当前最新的规范是SOAP 2.0。由W3C组织制定。
SOAP被广泛地认为是新一代跨平台和跨语言的分布式计算机应用的基础框架。
SOAP 1.1只支持HTTP POST方式向终端提交请求。
SOAP 1.2支持HTTP POST和GET两种方式。
六:WSDL是什么?
用于描述服务端所提供服务的XML格式。WSDL文件里,描述了服务端提供的服务,提供的调用方法,以及调用时所要遵循的格式,比如调用参数和返回值的格式等等。WSDL 很像COM编程里的IDL(Interface Description Language),是服务器与客户端之间的契约,双方必须按契约严格行事才能实现功能。 
服务主要通过六个元素进行定义
types,定义了交换信息的数据格式。
message, 传输消息的抽象定义。一个消息含有多个逻辑部分,每一部分和一些类型相关联;
portType, 一些抽象操作的集合。每个操作关联一个输入消息和一个输出消息;
binding, 针对操作和portType中使用的消息指定实际的协议和数据格式规范;
port, 指定一个绑定的地址,这样定义一个通信的终端;

service, 一些port构成的集合;

WSDL是XML描述的网络服务,基于消息机制、包含面向文本或面向过程信息的操作集合;

操作及消息的抽象定义与它们具体的网络实现和数据格式绑定是分离的,这样就可以重用这些抽象定义。消息是需要交换数据的抽象描述;端点类型是操作的抽象集合。
针对一个特定端点类型的具体协议和数据格式规范构成一个可重用的绑定。一个端点定义成网络地址和可重用的绑定的联接,端点的集合定义为服务。 
WSDL是一种XML应用,它将Web Services描述定义为一组服务访问端点,客户端可以通过这些服务访问端点对包含面向文档信息或面向过程调用的服务进行访问。
WSDL首先对访问的操作和访问时使用的请求/响应消息进行抽象描述,然后将其绑定到具体的传输协议和消息格式上,以最终定义具体部署的服务访问端点。
在具体使用中,可以使用任意的消息格式和网络协议。

在WSDL规范中,定义了如何使用SOAP消息格式、HTTP GET/POST消息格式以及MIME格式来完成Web Services交互的规范。


WSDL支持4种消息交换方式,来访问服务端点。
单向(One-way):服务访问端点接收消息;
请求响应(Request-response):服务访问端点接收请求消息,然后发送响应消息;
要求应答(Solicit-response):服务访问端点发送要求消息,然后接收应答消息;
通知(Notification):服务访问端点发送通知消息。

操作中引用到的消息通过message属性指定。 


七:Web Service的开源实现  Web Service更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言大都提供Web Service的开发实现,在JAVA领域,Web Service的框架很多,例如:Axis1&2,Xfire,CXF,java6自带Web Service引擎。 

1)从JavaSE6.0开始,Java引入了对Web Service的原生支持。我们只需要简单的使用Java的Annotation标签即可将标准的Java方法发布成Web Service。但不是所有的Java类都可以发布成Web Service。Java类若要成为一个实现了Web Service的bean,它需要遵循下边这些原则:(1) 这个类必须是public类 (2)这些类不能是final的或者abstract (3)这个类必须有一个公共的默认构造函数 (4)这个类绝对不能有finalize()方法 

2)Axis2(Apache eXtensible Interaction System)是Apache下的一个重量级WebService框架,准确说它是一个Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能制作和发布WebService,而且可以生成Java和其他语言版WebService客户端和服务端代码。这是它的优势所在。但是,这也不可避免的导致了Axis2的复杂性,使用过的开发者都知道,它所依赖的包数量和大小都是很惊人的,打包部署发布都比较麻烦,不能很好的与现有应用整合为一体。但是如果你要开发Java之外别的语言客户端,Axis2提供的丰富工具将是你不二的选择。 

3)XFire是一个高性能的WebService框架,在Java6之前,它的知名度甚至超过了Apache的Axis2,XFire的优点是开发方便,与现有的Web整合很好,可以融为一体,并且开发也很方便。但是对Java之外的语言,没有提供相关的代码工具。XFire后来被Apache收购了,原因是它太优秀了,收购后,随着Java6 JWS的兴起,开源的WebService引擎已经不再被看好,渐渐的都败落了。 

4)Apache CXF是Apache旗下一个重磅的SOA简易框架,它实现了ESB(企业服务总线)。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,不仅提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。而且可以天然的和Spring进行无缝集成。Apache CXF已经是一个正式的Apache顶级项目。 


注:基于 Apache CXF的Web Service开发  Web Service 支持不同语言开发,而不关心服务端或者客户端采用何种语言。这里讲解利用cxf进行Web Service开发。  这里先讲解Java中的web服务规范:  Java中共有三种Web Service规范,分别是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。 JAX-WS(Java API For XML-WebService),JDK1.6自带的版本为JAX-WS2.1,其底层支持为JAXB。早期的基于SOAP的JAVA的Web服务规范JAX-RPC(Java API For XML-Remote Procedure Call)目前已经被JAX-WS规范取代,JAX-WS是JAX-RPC的演进版本,但JAX-WS并不完全向后兼容JAX-RPC,二者最大的区别就是RPC/encoded样式的WSDL,JAX-WS已经不提供这种支持。  这里的JAX-WS规范我们采用Apache CXF作为实现(可以用Axis2实现)。  简单的说下注意事项:当你使用的是JDK1.5的时候,就必须要有jaxws-api-2.0.jar这个包的支持,如果使用的是JDK1.6就不用使用这个包了。因为1.6里已经有相关实现。 


原创粉丝点击