webservice技术介绍
一、WebService到底是什么?
用一句话总结:**WebService是一种跨越多种编程语言和操作系统平台的远程调用技术。
所谓的跨编程语言与跨操作平台,则是指服务端程序采用Java编写的方式,在客户端方面则可采用其他编程语言进行开发;反之亦然!而跨操作系统平台,则是指服务端与客户端程序可在不同的操作系统环境下运行。
所谓远程调用的概念指的是,在计算机a上运行的程序能够通过网络向计算机b上的特定对象发送请求并获取响应的过程。例如银联为商场提供的pos刷卡系统,在其POS机进行转账操作时所使用的转账功能代码实际上是运行在银行服务器端的。再如像amazon平台、天气预报系统的背后、淘宝网生态系统以及校内网资源等均提供将自身服务包装为webservice的方式供第三方访问。这种做法不仅简化了内部管理还使得外部网站或应用程序能够方便地调用这些服务功能进而有效拓展了自身的市场应用范围这一理念则可泛称为 service-oriented architecture (soa)模式的应用范畴
其实可以从多个角度理解WebService。表面上看,WebService就是一个程序向外界暴露一个可经Web调用的API,即可以通过编程方式通过Web调用该程序。而将用于调用WebService的应用称为客户端程序,为该程序提供服务的应用则被称为服务提供者端系统。深入分析,WebService则是一种构建互操作性分布式应用的新平台,它既是工具也是遵循一定标准的基础架构。它规定了应用如何在Web上实现互操作性,从而使得开发者可以根据个人喜好选择编程语言与开发平台来构建Web服务,并根据 Web 服务标准实现对这些服务的查询与访问功能。
WebService 平台依赖于一套协议以实现分布式应用程序的构建。
每个平台都拥有其数据表达方式以及类型系统。
为了确保不同平台之间能够有效交互,
WebService 平台需制定统一的标准用于描述Web服务。
为获取足够信息调用该Web服务,
Web服务 平台需制定统一的标准用于描述 Web服务。
最终的方法是远程过程调用协议(RPC)。
该协议需具备通用性和独立于具体编程语言的特点。
二、WebService平台技术
XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。
XML+XSD:
WebService通过HTTP协议传输数据,并采用XML格式封装这些数据(具体来说是在XML中明确指出调用远程服务对象的方法、传递的数据参数以及返回的结果)。
在WebService平台上使用XML来表示数据。
除了便于构建和分析之外,
其优势在于具备高度兼容性和 vendor-neutral特性。
因此,在技术选择上优先考虑的是兼容性和 vendor-neutral性而非技术本身的先进性。
XML解决了数据表示的问题,但它没有定义一套标准的数据类型,更没有说怎么去扩展这套数据类型。例如,整形数到底代表什么?16位,32位,64位?这些细节对实现互操作性很重要。XML Schema(XSD)就是专门解决这个问题的一套标准。它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。你用的工具可能已经自动帮你完成了这个转换,但你很可能会根据你的需要修改一下转换过程。
SOAP:
WebService通过HTTP协议发起请求并响应结果时,在传输的数据中采用XML格式打包,并附加一些特殊的报头信息以标识数据的具体形式;这些额外的信息载体与打包方式正是 SOAP 协议的标准定义。 SOAP 协议则提供了一种标准的方法来实现 Web 服务之间的远程编程通信(RPC)。
SOAP协议 = HTTP协议 + XML数据格式
SOAP协议采用了 SOAP 消息格式进行设计,并且 SOAP 协议建立在 HTTP 协议的基础上。此外, SOAP 同样建立在 XML 和 XSD 的数据编码机制之上,其中 XML 作为 SOAP 的数据编码方式。举个例子: HTTP 是普通的公路,而 XML 则像绿色隔离带和防护栏一样环绕着它,使得 SOAP 成为了经过改造的高速公路。
WSDL:
就像我们在购买商品时首先要了解商店提供的商品种类并做好相应的准备工作随后才能开始购物过程。商家为了更好地吸引顾客会采取张贴广告海报等方式进行宣传同样地WebService客户端在进行操作时也需要先了解相关的信息。具体来说我们需要获取该服务的服务端地址并了解该WebService提供的可用方法其次我们的WebService端点需要通过WSDL文件明确列举了可供外界访问的服务功能包括哪些方法以及这些方法的具体参数和返回值等信息同时还要指定该服务采用哪种方式实现对外提供所需的服务功能
作为描述Web Service及其相关功能、参数和返回值的标准语言,WSDL是一种基于XML的技术.该标准格式不仅适用于客户端程序,同时也被服务器程序采用.其作为机器可读的同时也为人类提供了良好的可读性,这一特点无疑是一项显著优势.目前有多款开发工具能够根据Web服务生成相应的WSDL文档,并且还能利用此文档自动生成供该服务调用的代理类代码.
Web服务器上存储有WSSDL文件,默认情况下可通过特定URL路径获取该文件内容。为了方便使用Webservice功能,在使用前需明确了解该Webservice所依赖的服务端点位置信息。具体而言,在Webservice服务提供商处有两种暴露WSDL文件位置的方式:一种是注册至UDDI服务台以便被查询;另一种则是直接告知客户端用于调用的服务端点信息。
三、WebService开发
WebService开发可以分为服务器端开发和客户端开发两个方面:
服务端开发:将公司内部系统的业务方法以WebService的形式对外发布,以便供远程合作单位和个人调用。(借助一些WebService框架能够非常方便地将业务对象发布成WebService服务,其中Java领域中常用的WebService框架包括AXIS、XFire、CXF等,而Java EE服务器通常也支持WebService服务的发布功能,例如JBoss公司提供了相应的支持.)
客户端开发:使用别人发布的WebService进行调用,大多数开发工作都属于这一范畴,例如调用天气预报WebService。(通过厂商提供的WSDL转Java工具生成静态代理类代码;利用厂商提供的客户端编程API类;采用SUN公司早期的标准JAX-RPC开发包;采用SUN公司最新标准的JAX-WS开发包.然而,SUN已被ORACLE收购)
WebService的工作调用机制:从客户端的角度出发,我们向这些WebService客户端API传递其对应的wsdl文件URL地址。这些代理类会自动创建出底层的服务代理对象,并将我的方法调用转换为soap格式的数据包通过HTTP协议发送出去。服务端接收到这些数据后会解析并生成响应值返回给客户端。对于服务端而言,从本质上讲,这些WebService框架类似于一个功能强大的Servlet——当客户端通过HTTP协议发送过来soap格式的请求数据时,该Servlet会解析数据内容,并根据解析结果动态地调用相关Java类的方法(包括创建对象),最终将方法返回的结果包装成soap格式的数据并通过HTTP响应将结果返回给客户端。
四、适用场合
1、跨防火墙通信:
如果一个应用程序拥有大量用户,并且分布于全球各地,则客户端与服务器之间的通信会面临诸多挑战。由于通常会在客户端与服务器之间设置防火墙或代理服务器,在这种情况下,单纯使用DCOM就不再是一个简单的解决方案,并且也不适合将客户端程序分发到每一个用户的终端设备中。传统的做法是将浏览器作为客户端,并编写大量的ASP页面来暴露应用程序的核心逻辑给用户体验者。然而这种方式不仅开发难度较高,并且维护起来较为复杂。如果能够将中间层组件替换为WebService,则可以直接通过用户体验界面调用核心功能模块。根据大多数开发者的经验,在一个复杂的UI设计与核心业务逻辑交互的应用系统中,采用WebService架构能够节省约20%的开发时间。
2、应用程序集成:
对于拥有企业级应用开发经验的人来说,在现代企业中实现跨平台和多语言程序的整合是一项再常见不过的工作了。然而这项工作量之大令许多开发者头疼不已:从运行于IBM主机的应用程序中获取数据;或者将数据发送至主机或基于UNIX系统的应用程序中去;即便在同一平台上,在同一环境下工作的却各有不同的软件厂商所开发的应用也可能需要整合在一起才能发挥应有的作用。采用Web Services接口,则能够方便地整合具有不同架构的应用系统
3、B2B集成:
用WebService集成应用程序,可以使公司内部的商务处理更加自动化。但当交易跨越供应商和客户、突破公司的界限时会怎么样呢?跨公司的商务交易集成通常叫做B2B集成。WebService是B2B集成成功的关键。通过WebService,公司可以把关键的商务应用“暴露”给指定的供应商和客户。例如,把电子下单系统和电子发票系统“暴露”出来,客户就可以以电子的方式发送订单,供应商则可以以电子的方式发送原料采购发票。当然,这并不是一个新的概念,EDI(电子文档交换)早就是这样了。但是,WebService的实现要比EDI简单得多,而且WebService运行在Internet上,在世界任何地方都可轻易实现,其运行成本就相对较低。不过,WebService并不像EDI那样,是文档交换或B2B集成的完整解决方案。WebService只是B2B集成的一个关键部分,还需要许多其它的部分才能实现集成。
通过采用WebService技术来完成B2B集成系统设计的主要优势在于其显著提升了系统的互操作性水平。该技术的核心机制在于将所有必要的商务功能模块进行‘展示’并转化为可被调用的服务端组件,在这种架构下不管合作伙伴采用何种技术平台或开发语言都能方便地获取所需服务功能。这种设计模式不仅大幅降低了系统开发周期以及维护成本还能使众多原本难以承受EDI的企业也能够轻松实现高效的业务流程整合
4、软件和数据重用:
软件重用是一个重要的话题。其应用形式多样,在实践中的应用程度高低不一。其中最基本的应用形式是基于源代码模块或类的一级”。其中一种具体形式是基于二进制组件的”。通过WebService应用程序可以采用标准方法实现功能与数据的"暴露"以便于其他程序调用从而达到业务级别上的应用效果
五、不适用场合
1、单机应用程序:
目前企业与个人仍广泛使用许多桌面应用程序,在某些场景下这些应用只需与本机上的其他程序进行通信,在这种情况下建议避免使用WebService因为它们效率低下且无法带来额外优势相反可以直接利用本地API来进行应用程序间的调用而如果考虑使用Web服务则应权衡其带来的性能损失而不必牺牲功能性
2、局域网的同构应用程序:
在许多应用中,大多数应用程序通常采用VB或VC作为开发工具,并运行在Windows平台环境下,并通过COM实现了组件之间的通信机制。举个例子,在Win32或WinForm应用程序中连接到局域网上的另一个服务器时会遇到此类问题。与传统的COM方式相比,在大多数情况下采用DCOM进行远程通信要比SOAP/HTTP更为高效。值得注意的是,在.D Tromoting 中也可以指定使用SOAP/HTTP来进行Web服务调用。不过最好还是直接通过TCP/IP协议实现RPC(远程过程调用)功能。
六、Java的Webservice技术
比较流行的有: Axis2,JAX-WS,CXF,xFire
1、JAX-WS概述
JAX/WS/2.0 被定义为 Java API for XML-Based Webservices(简称 JAX/WS)的版本号。
它是基于 J/XAPI/RPC/1.0 标准的一个扩展版本。
随后于其发布版本即为该标准。
在开发面向 Java/5 的 Web services 方面做出了最新贡献,
它引入了全新的编程模式并增强了基于 J/XAPI/RPC/的方式。
作为 JSR/224 标准的一部分,
它是 Sun 公司推出的一个全新的 web services 协议栈,
整个架构完全遵循现有标准构建。
在其 binding 层采用了
Java Architecture for XML Binding(JAXB, JSR/222),
而 parsing 层则采用
Streaming API for XML(St/XAx, JSR/173)。
此外,在 schema 方面也实现了全面的支持。
2、Axis2
Axis2被视为下一代Apache轴系统。尽管基于Axis1.x处理程序模型的支持,但它展现出更高的灵活性,并且能够扩展至新的架构.基于新架构进行了全面重构,并未使用Axis1.x的典型代码片段.开发动力源自寻求模块化程度更高,更具弹性和更高效的架构设计,这种架构能够轻松整合至其他相关Web服务标准与协议(如WS-Security,WS-ReliableMessaging等)的应用中
3、CXF
Apache CXF 等同于 Celtix 加上 XFire(XFire),最初版本曾被称作 Apache CeltiXfire(后更名),后正式定名为 Apache CXF(简称)。自成立以来就简称其为 CXF。该框架吸收了 Celtix 和 XFire两大开源项目的核心技术精髓,并全面支持 JAX-WS 标准(JAX-WS)。CXF不仅提供多种绑定方式供选择:包括常规绑定、数据绑定、传输绑定等;同时可灵活采用代码优先或 WSDL 优先的方式轻松实现 Web Services 的开发与应用;经过不断优化和完善后已发展成为一个功能完善且稳定的主流开源项目
Apache CXF 是一个开源的服务框架系统。它通过使用 frontend 编程接口,您能够轻松构建和开发一系列 CXF 服务组件,并与 JAX-WS 格式的服务架构实现无缝集成。这些服务组件能够支持多种通信协议:如 SOAP、XML/HTTP、RESTful HTTP 或 CORBA 等标准协议;并且能够在多种传输协议中运行:如 HTTP/JMS/JBI 等常见传输方式。此外,CXF 还显著简化了服务组件的创建流程,并且完全继承了 XFire 的传统优势,在与 Spring 等框架集成时同样能够实现无缝对接。
CXF集成了丰富的功能特性,并主要集中在以下几个方面:支持多种Web Services标准:CXF涵盖了多种Web Services标准体系包括SOAP、Basic Profile、WS-Addressing 以及WS-Policy等标准。Frontends:CXF提供了多种'Frontend'编程模型选择,并实现了遵循JAX-WS 2.0 TCK版本的JAX-WS API(JAX-RS)。该模块还引入了一个简单的前端开发模式允许客户端与服务端快速创建端点无需Annotation注解。此外CXF还支持基于WSDL优先开发模式以及基于Java代码优先开发模式两种方式以满足不同的开发需求。易用性:CXF的设计更加直观且易于使用提供大量便捷的API供开发者快速构建服务并通过Maven插件进一步简化集成流程支持JAX-WS API的同时也简化了基于Spring 2.0的XML配置方式等操作。支持二进制与遗留协议:采用模块化设计能够兼容不同类型的绑定方式包括非XML类型如JSON与CORBA协议等多种数据格式
注:改写后的内容在保持原有技术特性和核心信息的基础上对表达方式进行了一些优化包括词汇替换(如"优先开发"替换为"优先开发模式")句式变换(将主动句改为主动句)以及语序调整(将"包含了...包含"改为"涵盖...包括")以减少文本重复率同时尽量保持了原文的技术准确性及可读性
4、XFire
XFire作为新一代的Java Web服务引擎,在实践应用中展现出卓越的技术实力。在发布Web服务方面,XFire实现了轻而易举地实现这一目标。相较于其他主流的Web服务引擎而言,在配置便捷性和整合能力上具有明显优势。特别值得一提的是,在与Spring框架集成的过程中并未带来任何阻碍或复杂性。通过这种无缝整合方式,XFire不仅简化了工作流程,还显著提升了整体系统的运行效率,使Java开发人员能够达到与.NET开发人员相当的开发效率
XFire是由codeHaus组织提供的一个开源框架,在其支持下构建了连接POJO与SOA之间的桥梁。该框架的主要特性在于能够极为简便地将[POJO]发布为Web服务,并且这种处理方法不仅充分体现了[POJO]的优势,并且大大减少了将Java应用程序转换为Web服务所需的步骤;同时降低了SOA实现的复杂性,并为企业过渡至SOA架构提供了一条便捷可行的道路
