2002-09-16 14:12
创建.NET Web服务
Web服务是构造分布式、模块化应用程序的最新技术发展趋势。Web服务可以把业务逻辑划分一个一个的组件,然后在整个因特网的范围上执行其功能。本文就是向读者展示一个简单的.NET Web服务创建过程。
假如你过去曾经构造过微软世界的COM组件,那么你对创造可重用对象中间层的概念应该是比较熟悉了,正是可重用对象可以让开发者重用代码、利用由此带来的软件开发灵活性。这些组件能作为客户应用程序放在同一计算机上执行,或者以DCOM的形式在分离的机器上执行。
现在的.NET体系则把以上的概念大大推进了一步,.NET允许你把组件放在远程计算机上,而且你同这些远程计算机之间仅存在HTTP连接;换句话说,这些远程机器可能并不在企业网络内。由于SOAP协议的出现,DCOM的二进制标准也被基于文本和XML的调用语法代替了,新的技术标准允许客户采用任何操作系统调用Web服务,而这些Web服务则运行在任何操作系统上。
用.NET打造Web服务
微软早在大约两年前就发布了针对Visual Basic
6的SOAP工具包,但是,.NET出现后则进一步把构造Web服务的任务变得更方便了。对Web服务的支持已经内置在了.NET基础框架之内,这意味着任何.NET语言都能创建Web服务。Web服务甚至成为了Visual
Studio.NET中的一种工程类型。就象大多数.NET工程类型一样,你甚至能采用记事本这样的文本编辑程序创建全部应用程序。
为了创建Web服务,你的开发计算机上至少需要安装了ASP.NET引擎。这种引擎属于.NET框架和Visual Studio.NET的一部分。如果你手头没有ASP.NET引擎,那么你不妨从asp.net网站下载ASP.NET。下载软件只能在Windows 2000和Windows XP上使用。安装了ASP.NET之后,你要不创建一个虚拟目录要不直接在inetpub\wwwroot目录下创建自己的文件,我举的例子就用后面的方法。
最近看过伦敦一家公司的网站,他们网页上的价格单位是英磅。页面上有一个转换工具允许你把英镑换算为美元。这个转换工具就是一个绝佳的Web服务实例。现在就请打开记事本程序准备创建XML Web服务吧。
创建Web服务的第一步是标识Web服务、说明服务使用的语言同时创建的类的名字。在这个例子中,采用的Web服务编程语言是Visual Basic.NET,类的名字是ConvertMoney。你的第一行代码如下所示:
<%@ WebService Language=”VB” Class=”ConvertMoney” %>
接着,采用Imports声明导入System.Web.Services名称空间。这样做才能让你按照名字索引WebService等类而无须索引整个名称空间。该行代码如下所示:
Imports System.Web.Services
然后创建Web服务自身的shell。WebService类在你自己的类的名字前加上前缀,代码如下:
<WebService()>Public Class ConvertMoney
‘ code will go here
End
Class
到这一步几乎就可以增加类的功能了,但是你还得先增加一行关键代码。你必须继承WebService基类,这是.NET框架的一部分。这样做所实现的功能令你的服务类可以被任何Internet客户调用。增加Inherits声明之后,所有的代码如下所示。
<%@ WebService Language=”VB” Class=”ConvertMoney” %>
Imports
System.Web.Services
<WebService()>Public Class
ConvertMoney
Inherits WebService
‘ code will go here
End
Class
现在就可以给你的类添加功能了。在这里,你创建了一个简单函数接受英镑的货币量然后返回美元值。通常,你还应该在数据库内找到两种货币之间的交换汇率。在上面的例子里,你在代码中直接把汇率设定为1英镑可兑换1.44美元。在以上代码块中增加代码之后全部Web服务代码如下所示。
<%@
WebService Language=”VB” Class=”ConvertMoney” %>
Imports
System.Web.Services
<WebService()>Public Class
ConvertMoney
Inherits WebService
<WebMethod()>Public Function
_
PoundsToDollars(BritishPounds As Double) As Double
Return
BritishPounds * 1.44
End Function
End Class
代码编写完毕,你把代码文件存放在某个虚拟目录下(通常是c:\inetpub\wwwroot)即可。把文件保存为Converter.asmx。ASMX文件扩展名是.NET Web服务的标记。保存文件之后,你的Web服务就准备露脸了。
测试服务
现在准备好测试Web服务。期间你不必通过显式的编译全过程,只需要地在目录下保存文件然后调用它即可。ASP.NET会即时编译代码,就象ASP的处理一样。不过你得清楚地知道:编译的结果是本机代码,而传统ASP文件处理采用的是解释方式,两者之间有重大差别。
为了调用最新创建的服务,请打开你的浏览器并输入服务路径,包括ASMX文件的名字。如果你把服务放了在c:\inetpub\wwwroot目录下,那么你要在浏览器地址栏上键入http://localhost/converter.asmx。
在调用服务时会显示一幅包含大量信息的网页。一开始这可能会令你觉得有点糊涂:不管怎么说,你还没有为这种服务创造过HTML网页。其实,你根本不必创建测试网页,因为.NET框架已经帮你这个忙了。当你直接通过浏览器调用Web服务时,框架就会为你产生一个网页并通过它向你显示Web服务的信息,同时列出所有可用的方法。图A即是Web服务的网页。
图A
调用最新创建的Web服务
在这个例子中列出的方法没什么特别之处,因为仅有一个方法(PoundsToDollars)。鼠标点击这个方法会显示另一个网页,如图B所示。这一页就是该特定方法的测试页,其中包括对应方法接受的每个参数的文本框。现在请在文本框中输入“50”并按下Invoke按钮。
图B
选中PoundsToDollars方法
单击Invoke按钮会打开一个新的浏览器窗口,其中显示了一些XML代码。这些XML代码是由Web服务返回的其中包括了服务结果。返回的XML代码如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<double xmlns="http://tempuri.org/">72</double>
返回结果确实不一定非要采取对用户友好的格式,因为你通常不会从浏览器直接调用Web服务。相反,你往往从应用程序调用Web服务同时适当地处理返回的XML代码。不过,也很容易从上面的代码看出Web服务已经把50英镑转换成了72美元。
小结
上面举的这个例子很简单,它完成的任务是:创建一个组件,如果组件放在Web服务器上就可以被世界上任何地方的任何人访问。客户不必装载COM 或DCOM;甚至也不必拥有Windows客户程序。任何能创建HTTP连接的客户程序都能调用Web服务并且收到结果。这种功能开辟了创建分布式应用程序、实现平台之间互操作的全新领域。