|
本文发表于2003年5月22日《电脑报》
别被Web Service搞糊涂 合肥和谐软件/李玉祥 沈刘军
摘要 操作系统离不开丰富的应用软件的支持,同样,Web Service只有通过日益广泛的应用才能体现出其价值,目前比较流行的实现方法是使用.net 和 java两种方法,如今我们已经可以看到使用Microsoft、IBM等不同厂商的Web Service构建工具建立的Web Service应用。 在http://www.hexiesoft.net 上您可以欣赏到.NET下使用Microsoft开发工具建立的Web Service企业级ERP应用系统;在http://dwdemos.alphaworks.ibm.com/HospitalProj/index.html上您可以体验使用IBM 开发工具创建的提供医疗保险信息查询的Web Service,通过实例也许您能体验Web Service的魅力与美丽。 一、前言 Web Service的出现,给软件产业又一次带来新的商业模式。Web 服务提供用户在 Internet所要求的服务和信息,这些 Web 服务是可编程的,它们让用户可以用任何设备访问信息以及与其他站点和服务共享信息。同时,Web 服务的可信度在提高,使之成为交换可阅读信息的有效而可靠的媒介。Web 服务作为企业中有效的流程集成的一种机制在市场中被采用,纳斯达克和澳大利亚股票交易系统都是非常有名的例子,他们都提供了一个接口,用于输入公司代码和接受最终成交的股票价格。这只是一个实际应用,其实 Web Service包含许多内容和技术,在此我们只能“粗谈” Web Service。 二、Web service概念 什么是Web service呢?从表面上看,Web service 就是一个应用程序,它向外界暴露出一个能够通过Web进行调用的API。这就是说,你能够用编程的方法通过Web来调用这个应用程序。例如,笔者创建一个Web service ,它的作用是查询某公司某员工的基本信息,它接受该 员工的编号作为查询字符串,返回该员工的具体信息。你可以在浏览器的地址栏中直接输入HTTP GET请求 (http://www.hexiesoft.net/baseinfo.asp?id=00001)来调用罗列该员工基本信息的ASP页面,这就可以算作是体验Web Service了,够简单吧。 从深层次上看,Web Service 是一种新的web应用程序分支,他们是自包含、自描述、模块化的应用,可以在网络(通常为Web)中被描述、发布、查找以及通过web调用。 所谓Web服务,它是指由企业发布的完成其特别商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项应用服务。Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他Web Service应用程序可以发现并调用它部署的服务。Web Services是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。Web Service可以使用标准的互联网协议,像超文本传输协议(HTTP)和XML,将功能纲领性地体现在互联网和企业内部网上。可将Web服务视作Web上的组件编程。 Web service平台是一套标准,它定义了应用程序如何在Web上实现互操作性。你可以用任何你喜欢的语言(笔者用的是C#),在任何你喜欢的平台上写Web service ,只要我们可以通过Web service标准对这些服务进行查询和访问。 三、体系结构 Web Services体系结构是面向对象分析与设计(OOAD)的一种合理发展,同时也是电子商务解决方案中,面向体系结构、设计、实现与部署而采用的组件化的合理发展。Web 服务的一个主要思想,就是未来的应用将由一组应用了网络的服务组合,就像一个“黑盒子”。Web Services的体系结构是面向服务的体系结构(SOA)。

图1 面向服务的体系结构(SOA)
Service provider:发布自己的服务,并且对使用自身服务的请求进行响应。 Service registry:注册已经发布的Service provider,对其进行分类,并提供搜索服务。 Service requester:利用Service registry查找所需的服务,然后使用该服务在这些角色之间使用了三种操作: publish操作:使Service provider可以向Service registry注册自己的功能及访问接口。 find操作:使Service requester可以通过Service registry查找特定种类的服务。 bind操作:使Service requester能够真正使用Service provider。 Web Service中涉及服务本身和对服务的描述两个部分。典型的应用过程是:服务提供者开发一个通过网络可以被访问的服务,然后将服务的描述注册到服务注册器或者发送给服务请求者;服务请求者通过查找动作在本地或服务注册器中检索服务描述,找到后,通过绑定就可以使用该项服务。服务描述和服务实现是分离的,这使得Service requester可以在Service provider的一个具体实现正处于开发阶段、部署阶段或完成阶段时,对其(具体实现)进行绑定。另外,SOA中的组件相互之间必须能够进行交互,才能进行上述三种操作。所以Web Service体系结构的另一个基本原则就是使用标准的技术,包括服务描述、通讯协议以及数据格式等。这样一来,开发者就可以开发出平台独立、编程语言独立的Web Service,从而能够充分利用现有的软硬件资源和人力资源。 四、Web Service的特点 完好的封装性:Web服务既然是一种部署在Web上的对象,自然具备对象的良好封装性,对于使用者而言,他仅能看到该服务的描述。 松散耦合:这一特征也是源于对象/组件技术,当一个Web服务的实现发生变更的时候,调用者是不会感到这一点的,对于调用者来说,只要Web服务的调用接口不变,Web服务的实现任何变更对他们来说都是透明的,甚至是当Web服务的实现平台从J2EE迁移到了.NET或者是相反的迁移流程,用户都可以对此一无所知。对于松散耦合而言,尤其是在Internet环境下的Web服务而言,需要有一种适合Internet环境的消息交换协议。而XML/SOAP正是目前最为适合的消息交换协议。 使用协约的规范性:这一特征从对象而来,但相比一般对象其界面规范更加规范化和易于机器理解。首先,作为Web服务,对象界面所提供的功能应当使用标准的描述语言来描述(比如WSDL);其次,由标准描述语言描述的服务界面应当是能够被发现的,因此这一描述文档需要被存储在私有的或公共的注册库里面。同时,使用标准描述语言描述的使用协约将不仅仅是服务界面,它将被延伸到Web服务的聚合、跨Web服务的事务、工作流等,而这些又都需要服务质量(QoS)的保障。 使用标准协议规范:作为Web服务,其所有公共的协约完全需要使用开放的标准协议进行描述、传输和交换。这些标准协议具有完全免费的规范,以便由任意方进行实现。一般而言,绝大多数规范将最终有W3C或OASIS作为最终版本的发布方和维护方。 高度可集成能力:由于Web服务采取简单的、易理解的标准Web协议作为组件界面描述和协同描述规范,完全屏蔽了不同软件平台的差异,无论是CORBA、DCOM还是EJB都可以通过这一种标准的协议进行互操作,实现了在当前环境下最高的可集成性。 开放性: Web Service可以与其他Web Service进行交互。它具有语言和平台无关性。支持CORBA、EJB、DCOM 等多种组件标准。支持各种通讯媒体如:HTTP、SMTP、MQ、FTP、RMI over IIOP等。 五、Web service技术支持 Web service平台需要一套协议来实现分布式应用程序的创建。任何平台都有它的数据表示方法和类型系统。要实现互操作性,Web service平台必须提供一套标准的类型系统,用于沟通不同平台、编程语言和组件模型中的不同类型系统。Web service平台必须提供一种标准来描述Web service,让客户可以得到足够的信息来调用这个Web service。这些协议是: 1.XML和XSD 可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。使用 XML,您可以给文档中的标记赋予某种含意。更重要的是,机器也容易处理这样的信息。 XML是由万维网协会(W3C)创建,W3C制定的XML Schema(XSD)定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。现在的框架有一个共同的问题,它们在导入多个XML Schema 和 WSDL文档方面能力有限。在一个WSDL文件中提供完整的XML Schema 和 WSDL 定义而不是从各种位置导入XML Schema 和 WSDL 定义就是一个很不错的主意。尤其是,Microsoft .NET框架对 XML Schema 导入功能非常敏感。 Web service平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合Web service标准,所有你使用的数据类型都必须被转换为XSD类型。如想让它在使用不同平台和不同软件的不同组织间传递,还需要用某种东西将它包装起来。这种东西就是一种协议,如 SOAP。 2.SOAP SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架;将程序对象编码成为XML对象的规则;执行远程过程调用(RPC)的约定。SOAP可以运行在任何其它传输协议上。例如,您可以使用 SMTP,即因特网电子邮件协议来传递SOAP消息,这可是很有诱惑力的。在传输层之间的头是不同的,但XML有效负载保持相同。 Web Service 希望实现不同的系统之间能够用"软件-软件对话"的方式相互调用,打破了软件应用、网站和各种设备之间的格格不入的状态,实现"基于WEB无缝集成"的目标。SOAP在WEB服务堆栈中作为用于 XML 消息传递的一种非常普遍的协议,发挥着十分重要的作用。下面是WEB服务堆栈中SOAP的情况

图2 WEB服务堆栈中SOAP
3.WSDL Web service描述语言(WSDL)就是一个用机器能阅读的方式提供一个正式的描述文档的基于XML的语言,用于描述Web service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。WSDL是用来描述网络(network)服务或终端(endpoint)的一种XML语言,可用于动态发布Web Service、查找已发布的Web Services以及绑定Web Service。 4.UDDI 即是通用描述发现与集成;在 Web 服务世界中,公司间都需要通过一种方法来彼此发现,然后定义他们通过 Internet 进行交互及共享信息的方式。UDDI 是用来提供这一功能的框架。在此框架中,有一个工业标准规范集,允许服务描述自己并被发现。您可能要问,为什么要使用 UDDI 呢?UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。 5.远程过程调用(RPC)与消息传递 Web Service本身实际是在实现应用程序间的通信。我们现在有两种应用程序通信的方法:RPC(远程过程调用)和消息传递。使用RPC的时候,客户端的概念是调用服务器上的远程过程,通常方式为实例化一个远程对象并调用其方法和属性。RPC强调的是远程对象和它的界面,即属性、方法和调用时的参数。DCOM和.NET远程访问都是RPC的例子。消息传递一般是在耦合度更低的系统中。消息传递的概念是,客户端向服务器发送消息,然后等待服务器的回应。消息传递系统强调的是消息的发送和回应,而不是远程对象的界面。由于是基于消息的系统,客户端和服务器之间的耦合度比RPC方法更低。RPC系统试图达到一种位置上的透明性:服务器暴露出远程对象的接口,而客户端就好像在使用本地使用的这些对象的接口一样,这样就隐藏了底层的信息,客户端也就根本不需要知道对象是在哪台机器上。 操作系统离不开丰富的应用软件的支持,同样,Web Service这项技术只有通过日益广泛的应用才能体现出其价值,目前比较流行的实现方法是使用.net 和 java两种方法,并且两种实现方法可以互相操作;如今我们已经可以看到使用Microsoft, IBM,SUN, Borland等不同厂商的Web Service构建工具建立的Web Service应用。但是总的说来其使用的方法就是.net 和java 方法,其中.net方法是微软为web 服务量身订制的一种工具,是其NGWS策略中最重要的一环,而Java 技术就不同了,它被几家公司都采用,像 IBM,SUN, Borland等。
Borland公司在 JBuilder7中,用户现在可以使用Borland Web Services Kit for Java和Borland JBuilder MobileSet 3进行更快捷地开发Web Service和无线应用。其技术将使开发者能够在同一个开发环境中轻松地创建和集成Web Services、发布高质量的移动平台应用,从而大大提高开发者的生产力。在现在推出的JBuidler8中其针对Web Service的开发更是方便和高效。 Sun 公司的Java Web Services Developers Pack(Java WSDP)是一个方便的、集所有功能于一身的下载包,用来帮助在 Java 平台上开发 Web 服务。Java WSDP 并不是一个产品,而更倾向于是 Web 服务标准的参考实现,它是一个方便的、易于安装的包。所以,Java WSDP 不应是一个用来部署生产应用程序的环境,而更倾向于是一个用来开发和测试 Web 服务的环境;它主要用来帮助 Java 开发人员开始学习使用 Web 服务。Java WSDP 是一个优秀的用于理解、开发与测试 Web 服务的工具;并且,由于它是基于开放标准的,因此当您转到新的生产环境时并不需要重新开始。这个包由一些可以投入生产的实现和几个应该仅仅用于测试目的的组件组成。Java WSDP 包含 Java XML Pack 中的所有用于 XML 的 Java API,而且可喜的是它可以与一个 Java Servlet 实现(如 下面要介绍的IBM WebSphere)一起使用支持 Web 服务的 Java XML 组件。Java XML Pack 有许多与本文中所描述的组件相同的组件,但它却并未提供服务器平台。Java WSDP还包含有 Apache Tomcat 服务器以及为开发与测试 Web 服务提供一个功能完备的环境所需的其他组件。它们不是 Java XML Pack 的服务器组件,而是针对用 Java 平台支持 Web 服务的关键技术。如果您正在尝试学习如何使用 Java 平台来构建 Web 服务,那么 Java Web Services Developers Pack 便是一个优秀的、集所有功能于一身的包,它能帮助您入门。 IBM公司是业界第一家能够提供全面支持Web服务的电子商务基础设施中间件的公司。通过多年来与W3C(The World Wide Web Consortium)的共同努力,包括DB2、Lotus、Tivoli 和WebSphere在内的所有IBM软件都实现了对SOAP、WSDL、UDDI、Linux、 XML、J2EE等开放技术和标准的全面支持。从而使企业可以对Web服务应用程序进行创建、发布、安全调用、主机使用以及管理,也可以将现有的应用程序转化为Web服务。IBM 的XML 和 Web Services Development Environment是创建开放的、与平台无关的 Web 服务的开发环境,以便于 Web 服务跨异种系统的部署。WSDE 代表全面的 XML 开发环境。该工具组包括用于构建 DTD、XML 模式、XML、XSLT 以及 XML 和不同后端存储的映射的组件。IBM公司的WebSphere是比较好的基础架构软件平台,协助企业在多类计算机平台上建立、运行及整合电子商业应用。WebSphere 软件平台及开发工具 WebSphere Studio Application Developer (WSAD) 基于J2EE、XML 和Web服务等开放标准,并具备 IBM 在可靠性、扩展性和安全性上的主要优势,WebSphere 是 IBM 在 Web Services 策略中的核心平台.WebSphere 支持所有开发、发布、部署 web services 应用所必须的开放标准和技术,包括 UDDI,SOAP,J2EE,WSDL,和对 XML 技术集成的增强。这使得它在全球有很多用户。 Mircroft公司的.net 应该是算是日下最为流行的web service 开发软件。首先因为其公司在以前相应产品就占有相当大的市场份额,以至使其新推出的net得以有比较稳定的用户群;其次也是更重要的是 .NET平台不仅延续了微软一贯的编程风格,而且还增加了许多支持Web 服务的关键性技术,使得.net在操作的简单性和执行的稳定性,高效性上达到了一个非常好的结合。Visual Studio .NET 提供一组全面的、集成化的工具,以便于 Web 服务的开发。所有这些工具可以通过所提供的 GUI(除了 webserviceutil 工具)进行访问。还有更多的有助于编写 XML 文档、XML 模式等等的工具。Microsoft 的目标是,将其新编程语言,C# 作为选择的语言。虽然 C# 看起来与 Java 类似,但是还有一些 Java 中没有的独特的功能(例如:索引生成器(indexer)、事件(event)和代理(delegate))。.NET 中的一个新的重要的东西是“通用语言运行库”(CLR)。大体来说,CLR 的概念提供了语言独立性,这意味着只要 .NET 的 CLR 支持这种语言,您可以选择它作为代码编写语言。目前,包括 C++、Visual Basic 以及 COBOL,有 17 种支持的语言。它的性能应该很好,因为这种代码将被编译成本机代码,而不像在 JVM 中被解释。CLR 不支持 Java。而且在.net的 IDE 中提供了无缝的 Web 服务集成和拖放 GUI 以协助进行快速的开发。.net 用于web service 开发的主要工具是asp.net,从技术上说,ASP+(asp.net) 提供了一些超出 ASP 以前版本的优点(例如:代码和 HTML 的分离,与脚本语言相比较,对“真正”的编程语言如 C# 的支持)。Web 服务被集成在 .NET 中的方式,使您能够更容易地快速构建 Web 服务并使之运行。 总之,在web service开发上,.net 和Java都是很好的选择,尽管两者现在都有一些需要完善的地方,但是就目前来说他们还是最好的开发手段和技术。具体选择哪种开发工具,也是仁者见仁,智者见智的问题。从根本上说,这两种方法没有孰优孰劣的比较,只是根据使用者对这两种方法的掌握程度和对具体语言的偏爱程度来决定。不过说实话,笔者认为尽管两者难分伯仲,但是以微软在业界里技术和财力上的优势,兼之微软操作系统和相关工具在市场份额上的庞大比例,.net还是有一些优势的。
|