在前一篇文章里,我们通过一个基本示例演示了用.NET创建XML Web服务的方便性。所做的工作无非是创建了一个简单的文本文件,然后把它放Web服务器上而已,轻敲少许代码,你就轻松拥有了一种具有完备功能意义的Web服务。但是,我们还需要采取什么措施才能发布这个简单的服务使得别人能够用到它呢?此外,其他人用什么法子才能找到我们的服务呢?
在这篇文章里,我们就将探讨一下这些问题。首先让我们了解下名称空间这一(namespaces)概念,有了它才能有效地避免同其他Web服务发生冲突。然后,我们接着讨论如何在目录里发布你的Web服务以便其人能够使用它。
当我们在前面的文章中创建ConvertMoney Web服务并且用浏览器访问它的时候,.NET框架会自动地产生一个网页。这一网页的出现使得测试服务变得相当容易。但是,正如你从图A所看到的那样,网页中包含了大量信息。大多数开发者不会花时间去阅读这些网页展示的信息。然而,你应该理解这些内容在向你传达些什么信息,为什么说这些信息非常重要。
图A
网页上的头两行说明以下内容:
这到底是什么意思呢?原来,每一种Web服务都需要一个名称空间(namespace)。所谓名称空间就是标识Web服务的一种附加的方法。如果你和某人都创建了同名的ConvertMoney Web服务,那么这两个Web服务将在不同的名称空间之内存在,这样不会发生混淆。
.NET Web服务的缺省名称空间是tempuri.org。其含义是“temporary uniform resource identifiers”,中文的意思是“临时性的统一资源标识符”,也可以简称temp URI。微软建议,在你公开发布自己的Web服务之前最好修改这一名称空间,哪怕“公共”这个词语只意味着在你的公司内部有效。通常的情况下,最好用你公司的域名作为命名空间。
设置名称空间很简单,在你的Web服务中添加少许代码即可。要加入的代码不过是出现在类之前的WEBSERVICE关键词的一个属性。就我们的ConvertMoney Web服务而言,代码的前3行原本如下所示:
<%@ WEBSERVICE Language="VB"
Class="ConvertMoney" %>
Imports System.Web.Services
<WEBSERVICE()>Public Class ConvertMoney
为了修改名称空间你只需要在WEBSERVICE标签之前添加Namespace属性即可,如下所示:
<%@ WEBSERVICE Language="VB"
Class="ConvertMoney" %>
Imports System.Web.Services
<WEBSERVICE(Namespace:="http://volanttraining.com")> _
Public Class ConvertMoney
由于增加了这个Namespace属性,现在你的ConvertMoney Web服务就同其他人的
ConvertMoney Web服务区分开了。如果你再运行Web服务,关于tempuri.org的提示信息就不再出现了(图B)。该服务的运行没什么变化,和以前一样,但它不再使用tempuri.org这个缺省的名称空间了,现在它正使用的名称空间是volanttraining.com。
图B
为了发布你的Web服务以便其它人能使用它,你需要在一个可查找的目录中登记自己的服务。幸好,这样的一种目录已经出现了:这就是所谓的UDDI。UDDI是一种开放的、与供应商无关的标准,它就像是网络世界中的黄页。你可以通过UDDI找到现有的Web服务或者发布你自己的Web服务。其实,Web服务并没有拷贝到UDDI服务器上,UDDI的作用不过是列出现有的服务指引人们找到服务所在的服务器。从这一意义来看,它是一种真正的信息索引目录而不是存储具体信息的仓库。
你可以访问UDDI的网站了解有关UDDI的更多信息。这是公共的UDDI,任何人都能从中检索它,通过它列出Web服务信息。为了使用公共的UDDI目录,你必须注册一个帐号。当然,你还可以在自己的机构内引入UDDI;在你的企业内部安装UDDI服务器之后,你的开发人员就可以发布、发现和使用Web服务了。
当你访问UDDI网站的时候,你可以在目录中注册你的公司。因为UDDI是一个开放的计划,所以微软、HP以及IBM等公司都在使用它。参与该计划的每家公司都运行着自己的UDDI服务器,因此你必须选择自己想访问的公司。版本1就是目前的UDDI版本,版本2还处于测试阶段。如果你决定访问微软版本1 UDDI站点,那么你可以从这里检索现有的Web服务。
UDDI在检索特定服务或功能方面具有相当高的灵活性。你可以根据公司的名字、商业地点、SIC代码或其他标准检索服务。例如,如果你想检索术语“zip”,搜索条件设置为“按名称检索”,那么返回的Web服务的名字将包含“zip”字样。
除了检索服务以外,你还可以注册自己。一旦你在网站上注册了自己的公司,你就能为你注册的Web服务添加服务名、服务说明和Web地址。
我们现在知道用.NET创建XML Web服务以及添加名称空间来区别其他Web服务的过程相当简单。然后,你可以把自己的服务发布到使用UDDI的公共目录以便其它人能发现并且消费你的Web服务。你还可以用UDDI寻找其他的Web服务用在自己的应用程序里,此外,你甚至可以你的机构内部使用UDDI,通过它为你的企业开发注册Web服务。