Web Service 开发详解
一只倒霉的狐狸被猎人用套子套住了一只爪子,它毫不迟疑地咬断了那只小腿,然后逃命。放弃一只
腿而保全一条性命,这是孤独的哲学。
人生亦应如此,当生活强迫我们必须付出惨痛的代价时,主动放弃局部利益而保全整体利益才是最明
智的选择。智者曰:“两弊相衡取其轻,两利相权取其重。”趋利避害,这也正是放弃的实质。
玫瑰花枯萎了,蜜蜂仍拼命吮吸,因为它以前从这朵花上吮吸过甜蜜。但是,现在在这朵花上,蜜蜂
吮吸的是毒汁。蜜蜂知道这一点,因为毒汁苦涩,与以前的味道是天壤之别。于是,蜜蜂愤不过,它吸一
口就抬起头来向整个世界抱怨,为什么味道变了?
终于有一天,不知道是什么原因,蜜蜂振动翅膀,飞高了一点。这时,它发现,枯萎的玫瑰花周围,
处处是鲜花。
求职的路也并非一帆风顺,有时不好的境遇会不期而至,搞得我们狼狈不堪。这时我们应该学会放弃,
放弃焦躁的心理,放弃过高的期望,放弃已经属于我们但我们并不擅长的职位或行业。放弃有时候是痛苦
的,但学会放弃却是一种洒脱,一种智慧。
7
278
.NET 深入体验与实战精要
7.1 Web Service 基本概念
Web Service 主要是为了使原来各孤立的站点之间能够相互通信、共享资源而提出的一
种接口。 Web Service 所使用的是 Internet 上统一、开放的标准,如 HTTP、XML、SOAP、
WSDL 等,所以 Web Service 可以在任何支持这些标准的环境(Windows、Linux)中使用。
其中,SOAP 协议(Simple Object Access Protocal,简单对象访问协议)是一个用于分散和在
分布式环境下交换网络信息的基于 XML 的通信协议。在此协议下,软件组件或应用程序能
够通过标准的 HTTP 协议进行通信。它的设计目标就是简单性和扩展性,这有助于大量异构
程序和平台之间的互操作性,从而使存在的应用程序能够被广泛的用户访问。Web Service
是构造分布式、模块化应用程序的最新技术发展趋势。
因此,我们可以这样定义 Web Service:通过 SOAP 在 Web 上提供的软件服务,使用
WSDL 文件进行说明,并通过 UDDI 进行注册。Web Service 体系结构的主要优点之一是,
它允许在不同平台上以不同语言编写的各种程序以基于标准的方式相互通信。相对以前的方
案而言,Web Service 的另一大优点是使用标准的 Web 协议——XML、HTTP 和 TCP/IP,
相对易用和通用。
微软在其.NET 战略中,对其主推的 Web 服务做了大肆的宣扬。现在,Web 服务正如火
如荼地发展着,相关的各项新技术层出不穷。Web 服务的发展正构筑着互联网时代美好的明
天。在本节中,将向大家介绍 Web 服务的一些基本知识,以及如何用 ASP.NET 来创建 Web
服务和调用 Web 服务。
7.2 Web Service 的应用场景
以前,分布式的应用程序逻辑需要使用分布式的对象模型,通过使用 DCOM、CORBA、
RMI 之类的基本结构,开发人员仍可拥有使用本地模型所提供的丰富资源和精确性,并可将
服务置于远程系统中。
当已经有中意的中间件平台(RMI、Jini、CORBA、DCOM 等)时,我们为什么还要为
Web 而烦恼呢?中间件确实提供了强大的服务实现手段,但是,这些系统有一个共同的缺陷,
那就是它们无法扩展到互联网上:它们要求服务的客户端与系统提供的服务本身之间必须进
行紧密耦合,即要求一个同类基本结构。然而这样的系统往往十分脆弱:如果一端的执行机
制发生变化,那么另一端便会崩溃。例如,如果服务器应用程序的接口更改,那么客户端便
会崩溃。为了能扩展到互联网运用,我们需要一种松散耦合的基本结构来解决这个问题。在
些情况下就迎来了 Web 服务的诞生。Web Service 技术是一种基于标准的 Web 协议的可编程
279
7
Web Service 开发详解
组件,我们可以把 Web Service 看做 Web 上的组件,Web 服务提供者开放一系列的 API,开
发人员通过调用这些 API 来集成 Web 服务,构建自己的应用程序。
1.SOAP
SOAP(Simple Object Access Protocal)是在分散或在分布式环境中交换信息的简单协议,
它基于 XML 协议,以 XML 形式提供了一个简单且轻量的用于在分散或分布环境下交换结
构化和类型信息的机制,其本身并没有定义任何应用程序语义,如编程模型或特定语义的实
现,而是通过提供一个有标准组件的包模型和在模块中编码数据的机制定义了一个简单的表
示应用程序语义的机制,使其能够用于从信息传递到 RPC 的各种系统。SOAP 规范定义了
SOAP 消息的格式,以及怎样通过 HTTP 协议来使用 SOAP。SOAP 最引人注目的特征是它
可以在许多不同的软件和硬件平台上实现。这意味着 SOAP 可用于连接企业内部和外部的
不同系统。过去曾试过多种方法以提出一个可用于系统集成的通用通信协议,但它们都没有
像 SOAP 一样获得广泛的认可。为什么呢?因为与许多早期的协议相比,SOAP 更小巧,而
且更简单和易于实现。HTTP 的普及和 SOAP 的简单性使你几乎可以在任何环境下调用它们,
因此成为 XML Web Service 的理想基础。
2.WSDL
你会怎样向别人介绍你的 Web Service 有什么功能,以及每个函数调用时的参数呢?你
可能会自己写一套文档,甚至口头告诉需要使用你的 Web Service 的人。这些非正式的方法
至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的 Web Service 的时候,他们
的工具(如 Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的 Web
Service。解决方法是使用机器能阅读的方式提供一个正式的描述文档。Web Service 描述语
言(WSDL)就是这样一个基于 XML 的语言,用于描述 Web Service 及其函数、参数和返回
值。因为是基于 XML 的,所以 WSDL 既是机器可阅读的,又是人可阅读的,这将是一个很
大的好处。一些最新的开发工具既能根据你的 Web Service 生成 WSDL 文档,又能导入
WSDL
文档,生成调用相应 Web Service 的代码。
3.UDDI
UDDI(通用发现、说明和集成)是 Web 服务的黄页。是一套基于 Web 的、分布式地为
Web Service 提供信息注册中心的实现标准,同时包含一组能使企业将自身提供的 Web
Service 注册使得别的企业能够发现的访问协议。与传统黄页一样,你可以搜索提供所需服
务的公司,阅读以了解所提供的服务,然后与某人联系以获得更多信息。
趣味理解
Web Service 好比一个服务供应商,给其他厂家提供基础服务,其他厂家再
将这个服务包装成自己的产品或者服务提供给别人或自己使用。有点像 OEM 了。
既然两个公司需要合作,不可能靠一句话就可以的,就需要一些标准和规范的东
西来实现。那么:
SOAP 就像两个公司之间签的合同,约束双方按一定规矩和标准办事。
WSDL 则像说明书,告诉别人你有什么,能给别人提供什么服务。
UDDI 好比你的公司需要在黄页或工商注册,企业的主营业务登记,方便别
人查询。当然,你也可以不在 UDDI 中注册,就像在地下室开展业务,靠的是
280
.NET 深入体验与实战精要
口头吆喝;但是如果你希望拓展市场,则需要 UDDI 以便能被客户发现,更方
便地找到你。
Web Service 是创建可互操作的分布式应用程序的新平台。Web Service 的主要目标是跨
平台的可互操作性。为了达到这一目标,Web Service 是完全基于 XML、XSD 等独立于平
台、独立于软件供应商的标准的。Web Service 在应用程序跨平台和跨网络进行通信的时候
是非常有用的。Web Service 适用于应用程序集成、B2B 集成、代码和数据重用,以及通过
Web 进行客户端和服务器的通信的场合。
当然,Web Service 也不是万能的,你不能到处滥用 Web Service。在有些情况下,Web
Service 会降低应用程序的性能,而不会带来任何好处。例如,一台机器或一个局域网里面
运行的同构应用程序就不应该用 Web Service 进行通信。
到现在为止,我们已经讨论了如何与 Web Service 通信(SOAP),Web Service 是怎样
进行说明的(WSDL),以及如何查找 Web Service(UDDI)。这些内容构成了一套基本规范,
为应用程序的集成和聚合提供了基础。根据这些基本规范,公司可以构建实际的解决方案,
并从中获益。
7.3 创建简单的 Web Service 项目应用
在 ASP.NET 中创建 Web Service 和写一个类文件是很相似的。Web Service 是一个以.asmx
为扩展名的文本文件,但其中必须包含一条 @WebService 指令,用做声明。我在这里向大
家讲解一个查询产品价格的 Web 服务实例,该实例完成的功能相当简单。但是能对初学者
起到很好的指导作用。
(完整代码示例位置:光盘\code\ch07\WebService1)
实现步骤如下。
(1)打开 VS.NET,新建一个项目,在左边的面板中选择“Visual C#”选项,在右边的
面板中选择“ASP.NET Web 服务应用程序”选项,将其并命名为“WebService1”,如图 7-1
所示。
281
7
Web Service 开发详解
图 7-1 新建 ASP.NET Web 服务应用程序
(2)单击“确定”按钮后,VS.NET 就为我们创建了一个 Web 服务项目。在新建完项
目后,在开发环境中会出现如图 7-2 所示的代码。
图 7-2 Web 服务应用程序
在上面的代码编辑框中,VS 已经替我们创建了一个简单的 HelloWorld 示例 Web 服务接
口方法,这个方法和我们普通的方法所不同的是带有[WebMethod]属性。我们可以注释掉该
方法,然后添加我们自己的业务接口代码。
(3)实现我们自己的业务代码。
注释掉系统自动创建的 HelloWorld 方法,创建一个查询产品价格的 GetProductPrice
方法。