最近 有很多关于"Web Services"的议论并且许多公司也开始为他们的企业应用作出反应。那么,Web Services究竟是什么?简单的说,他们是另一个分布计算技术(像CORBA, RMI, EJB等等),容许我们创建客户端/服务端应用。
举个例子,让我们假设我不得不为一个连锁店开发一个程序。这家连锁店分布在全国各地,但是我的产品主目录(master catalog of product)只存放在我的中心办公室的数据库中,并且分店的软件必须能够访问这个产品目录.我可以通过一个被称为ShopService的Web Service 来发布这些目录。
重要的是:在网站上发布的时候不能出错。在网站上的信息(像你正在读到的一样)是为人编写的。而在Web Service上的信息可以被软件访问,并不时直接被人访问(尽管存在人用这个软件的可能)。虽然Web Service 很大程度上依赖现有的Web技术(像我们正在看到的HTTP),但他们和Web浏览器与HTML没有联系。我们再重复一遍: 网站是为人服务的,而Web Service 是为软件服务的 :-)
客户端(在商店的PC)在那个时候将要连接(服务器上的)WebService,并发送一个需要目录的服务请求。服务器将会通过一个服务响应返回目录信息。当然这是一个描述Web Service如何工作的非常潦草的例子。等一下,我们将会看到一个非常详细的解释。
我们中的一些人可能会这么想:"嘿,等一下!我可以通过RMI,CORBA,EJBs,等很多其他技术来实现啊!"。那么。为什么还要Web Service? 好的,Web Service 也有很多优于其他技术的地方:
- 大部分Web Service 使用HTTP传输消息(像服务请求和响应)。如果你想建立一个Internet范围的程序,这是一个主要的优点,因为大部分Internet's的代理和防火墙都不会破坏HTTP的传输(不像CORBA会在穿过防火墙时遇到麻烦)
当然了,Web Service也存在以下一些缺点:
- 压力过大。很明显所有在XML中的数据没有定义好的二进制代码效率高。在你赢得通用性的同时降低了效率。尽管那样,这个压力通常是可以被大部分应用程序所接受的,
-
用途狭窄。目前,由于他们只支持很基本的服务种类,所以Web Service 的用途不是很多。例如CORBA提供给编程者很多正在支持的服务(像持续服务,通知,生命周期管理,转换等等)。事实上,在下一页我们可以看到网格服务可以真正的补偿了用途狭窄的缺点。
然而,分布式的Web Service有一个很重要的特点。像CORBA和EJB技术是面向关系紧密的分布式系统的,它们的客户端和服务端彼此非常依赖。但Web Services是面向松散关系的系统,客户端可以直到真正调用web service才知道Web Service的知识,例如基于网格的应用。
一个典型的Web Service的调用
这些都是如何工作的呢?让我们看一下一个完整的Web Service调用的全部的调用步骤。现在还不要担心那些缩写词(SOAP,WSDL,...),等一下我们将会详细的解释它们。
- 正如我们前面所说的,一个客户端可以不知道Web Service是如何调用的.所以我们第一步是寻找满足我们要求的Web Servicede 的位置,例如我们想要找一个可以告诉我们美国城市温度的Web Service。我们可以通过与UDDI注册点联系得到Web Service的位置。
- UDDI注册器将会返回告诉我们哪个服务器可以提供给我们我们想要的服务(像美国城市的温度)
- 我们现在知道Web Service的位置了,但我们还不知道如何使用它。我们确实知道它可以给我们美国城市的温度,但是真是的服务是如何调用的呢?我们调用的方法可能被称为Temperature getCityTemperature(int CityPostalCode)






