介绍
在学完Web Service的课程后,我深深地被它的内容所吸引了,这使得我想在这方面做个总结,本篇文章是介绍.NET下的Web Service的概念的,在写作期间笔者也参考了很多优秀的文章,相信对于巩固该方面的基础知识是十分有帮助的。
技术纵览
Web Service是一种可以通过标准Internet协议访问的可编程的应用逻辑。Web Service将基于组件的开发理念和web进行了合并。之所以说以组件为基础的理念,是因为Web Service对于用户而言只是一个黑盒,它可以被重用而不用考虑Web Service内部是怎样实现的,但与现今组件技术的区别是,Web Service不是通过对象模型相关的协议(例如:DCOM和RMI)进行访问的,它是通过普遍的web协议(例如:HTTP)和数据格式(例如:XML)进行访问的。
背景-编程历史
如下图所示,这是整个软件发展的历史坐标图,它描述了整个计算机技术的发展过程以及它们对开发的影响:
图1 编程历史发展图
下面我就对上图的内容做一个简要的解释,通过这个过程我们可以慢慢了解Web Service的产生过程。
机器语言(Machine)
在60年代末,编程语言是机器语言,程序中只包含0和1。这是存储和操作信息的一种最简单的方式,因为它只包含ON-OFF状态。机器语言反应了计算机的结构。
图2 ON-OFF状态
汇编语言(Assembly)
汇编语言是最久远的非机器语言,它允许人们以一种可读的方式写程序,而不是直接写二进制代码(或者十六进制)。汇编语言和一些符号指令以及可执行机器代码相关联,它与机器的指令相对应。
高级语言(Hign Level)
在70年代初,高级语言很受欢迎。例如:BASIC, COMBOL, FORTRAN等。高级语言是低级语言的抽象。一种高级语言指令将被翻译成可执行机器指令,一些早期的高级语言甚至和机器指令很相近。例如:早期的COMBOL指令通常会翻译成为一些机器语言指令集。随着时间推移,高级语言的抽象级别越来越高,高级语言变得易懂更容易学习了,而且开发时间也大大的缩短了。
过程化语言(procedual)
过程化编程是有时被认为是命令式编程(指定了程序运行的步骤,通过这些步骤程序将达到预期的状态)的同义词,但也可以指一种建立在过程调用基础上的编程模型。我们现在最熟悉的C语言就是一种过程化语言。过程,程序中通常指例程,子程序,方法或者函数,包含了一系列计算步骤,通过程序进行执行。
面向对象(Object Oriented)
在面向对象编程中程序员不仅要为数据类型定义数据结构,同时也要定义数据结构上的操作(方法)。在这种方式下,这种数据结构被成为对象,对象包含数据和操作。而且,程序员可以创建对象和另一个对象之间的关系,例如:一个对象可以继承另一个对象。我们大家经常使用的C#、C++和JAVA就是面向对象语言,在此就不过多介绍了。
事件驱动(Event Driven)
在90年代初,事件驱动变得流行起来。事件驱动编程指程序的运行由用户的动作(鼠标点击事件,键盘按键事件)或者程序间的消息通信决定。
面向服务(Service Oriented)
SOA(Service Orientd Architecture)的目标是实现软件代理之间交互的松耦合架构。服务是由服务提供者提供的一系列工作,它实现了一些客户需要的功能。SOA的概念带动了现今web service技术的发展,使得程序间的互用性得到了提高。
Web Service的思想
Web Service是一种可以通过Internet提供和调用的服务:
1.通过标准的接口描述;
2.使用标准的web协议。
图3 web service架构
Web Service的定义
Web Service是一种在网络上支持machine-to-machine交互和互操作的软件系统设计。它包含了可由机器处理的接口描述格式(WSDL)。其它系统通过SOAP协议与Web Service进行交互,SOAP协议使用了HTTP协议,它传输了包含了XML与其它Web相关协议的序列化信息。
图4 web service的协议
Web Service中的四个关键组件
一个Web Service程序是在四个关键组件上建立的,它们的名字分别为:XML、SOAP、WSDL和UDDI。它们是Web Service的核心,如下图所示:
图5 Web Service四个关键组件
如上图所示UDDI建立了Web Service 的目录,它可以通过Internet进行访问,WSDL则描述了服务的内容个格式,SOAP协议规定了Web Service 的客户可以通过发送和接收XML来使用服务,左后SOAP是使用HTTP协议在Internet上进行传输的。在后续的章节中我将详细的向大家介绍这些组件。
工业用途
以上的四个组件在很多公司(MS、IBM等等)的不同产品中都使用到了,它们作为Web Service标准的支持者,系统包含了上述四种关键的组件。虽然不同的公司使用的工具不同,但是它们都使用了相同的Web Service 概念。为了实现跨系统之间的通信,任何系统都需要清晰地定义消息、传送方式、服务目录、处理过程以及事务处理,这些概念的实现是实现可靠的消息通信、安全性以及错误处理能力的基础。下图显示了不同公司Web Service 的架构图:
图6 不同公司的Web Service架构
经典的示例
为了更清晰地了解.NET下Web Service的细节,让我们通过一个示例来慢慢剖析。假设有个购物订单记录(purchase order record),它对应着下面的类,包含两个字段:item和amount:
class PurchaseOrder
{
string item = “socks”;
int amount = 1;
}
在下面的步骤中,我们将看看这个记录是怎样通过四个Web Service核心组件进行处理的。
1.The XML Component
图7 The XML Component的处理
首先的步骤将把类的数据序列化成为XML文档的格式。XML的最大优势是它可以在异构的系统之间进行消息的通信,它可以描述数据的内容,通过解析后不同系统可以使用数据。所以使用XML进行数据交换对于实现系统之间的通信是有非常大的帮助的。在上例中序列化后的XML文档描述了PurchaseOrder的内容。
2.The SOAP Component
SOAP(Simple Object Access Protocol)全名是简单的对象访问协议,它是建立在XML基础上的,它允许应用程序间通过HTTP协议进行信息的交换。现今的程序大多使用远程过程调用(Remote Procedure Calls 或者 RPC),例如DCOM和CORBA,但是在HTTP上却没有定义。RPC存在这兼容性和安全性方面的问题,防火墙和代理服务器很可能会阻碍这方面的通信。SOAP是为了应用程序能通过HTTP进行通信而设计的,SOAP提供了运行在两个不同操作系统上的程序通信的方式,这两个系统可以使用不同技术和语言实现,即异构的。
图8 SOAP协议结构
一个SOAP消息就是个普通的XML文件,它包含三个主要元素:envelope、header和body。由上图可看出它的结构。类PurchaseOrder在SOAP中的描述如上图所示,它的头部header为null,body中包含了PurchaseOrder的记录:item和amount。下面的代码显示了body的信息:
3.The WSDL Componet
WSDL(Web Service Definition Language)全称是web service定义语言,它也是建立在XML基础上的语言,它描述了Web Services的内容和访问它们的方法,同时也定义了Web Service的消息格式以及协议细节。一个WSDL文件将服务定义为了一系列网络结点(endpoints)或者端口(port)的集合。在WSDL中,抽象定义的结点(endpoint)和消息(message)是和它们在网络的实际部署以及数据格式的绑定相分离的,这样的设计允许抽象定义可以重用,其中包括了消息和端口的重用,其中消息指的被交换的数据的抽象描述,而端口类型则包含的是操作的抽象集合。为一个特殊的端口指定了协议和数据格式后这就组成了一个可重用的绑定(binding),一个端口是通过把网络地址和一个可重用的绑定相关联而定义的,端口的集合则定义了一个服务。因此,WSDL文档使用以下的核心元素定义网络中的服务:
图9 WSDL中的核心元素
(1)Type:类型,它是定义数据类型的容器,定义时使用了一些类型系统(例如:XSD);
(2)Message:消息,通信数据的抽象和类型定义;
(3)Operation:操作,服务中支持的操作的抽象定义;
(4)Encoding:编码,为所有终端的抽象的操作集合指定协议和数据格式;
(5)Endpoint:终端:单个端点定义了一个绑定(binding)和一个网络地址的合并。
以下的例子显示了WSDL中定义的简单服务,服务提供了PurcahseOrder。这个服务通过在HTTP协议上使用SOAP协议进行部署。
图10 WSDL示例
4.The UDDI Component
UDDI(Universal Desicription Discovery and Integration)是一个平台独立和开放的框架,通过这个框架可以进行服务的描述,服务的发现以及新的业务服务的集成。
图11 UDDI示例
UDDI是OASIS赞助的,通过UDDI商业个体可以发布服务列表和定义这些服务和软件应用程序在Internet中的交互方式,用户通过UDDI也可以发现服务。一个UDDI商业注册包含三个组件:
(1)白页(white pages):地址、联系方式和ID;
(2)黄页(yellow pages):在分类标准上建立的编目;
(3)绿页(green pages):商业个体展示的服务的技术信息。
UDDI是Web Services核心标准中的一个。通过UDDI,可以进行SOAP消息询问,而且UDDI还提供了WSDL的访问方式,WSDL描述了与目录中列出的web service交互所需要的协议绑定和数据格式。
相关的web service方法(get, set)将在UDDI服务器上进行注册。稍后,服务器将会发布服务,你将可以访问和查看这些服务。
Windows Server 2003中包含了企业UDDI服务,它提供了动态灵活的Web Services基础,而且且也可以通过它为内部网络建立自己的UDDI目录,企业UDDI服务将帮助企业组织Web Services和对Web Services进行分类。通过在UDDI中应用服务的分类,例如:按部门分类或按服务等级分类,公司可以建立一个标准的发现服务。
Web Services体系结构设计
如下图所示,一个理想化的.NET web服务器和客户端设计如下:
图12 web service体系设计
Web Services的优点
(1)Web Services使得运行在不同平台/操作系统的应用程序可以进行协同工作;
(2)Web Services使用开放的标准和协议。协议和数据格式是文本格式的,使得开发人员很容易读懂;
(3)Web Services使用HTTP协议,它可以在不改变防火墙的过滤原则的前提下通过防火墙,而相同情形对于RPC则很可能会被限制;
(4)Web Services允许不同地点的不同公司的软件和服务之间进行集成服务;
(5)Web Services允许服务和基础组件的重用。
(6)Web Services是松耦合的,因此是种很适合建立分布式应用程序的方法。
Web Services的缺点
(1)相比一些成熟的分布式计算开放标准(例如:CORBA),Web Services的标准特性,例如事务处理,现今还不存在或者还在研究中。
(2)相比别的分布式方法,例如:RMI,CORBA或者DCOM,Web Services可能在性能上比较劣势。这是选择了文本基础的格式导致的普遍后果。
总结
我希望,大家通过阅读后能明白web service的核心概念,在脑海中建立一个完整的体系,同时通过学习代码上的实现加深印象,由于课件是英文的,所以有些语句可能会望文生义,欢迎指正,谢谢大家!