一个服务通常注册到一个公共或者私有的登记中,如数据库、目录服务、UDDI登记或者一个XML文件。一旦服务注册完毕,需要调用服务的组件可以用登记来定位和调用该服务。soa可以管理服务的注册和调用工作,而且不需要知道服务是在哪里和如何配置的。
登记和服务查找机制允许一个组件或者服务的地址对开发者是透明的(开发者不需要知道它们的地址)。这种方式就创建了一个虚拟的平台,在这个平台上所有的组件和服务都可以认为驻留在同一个机器或者程序设计平台上,如图A所示。
图A
该虚拟平台允许你用同样的调用来访问本地和远端的服务,即透明访问。为了实现这一点,对服务的引用应该抽象实现,如利用soaP/HTTP。例如,下面的soaP封套(envelope)按照引用信息的方式传递,它为一个股票报价服务提供了服务名、操作名和参数。
<?xml version="1.0"?>
<soap:Envelope
xmlns:soap=http://www.w3.org/2001/12/soap-envelope
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Body xmlns:m="http://www.stocksrus.com/stockquote">
<m:GetStockQuote>
<m:Symbol>MSFT</m:Symbol>
</m:GetStockQuote >
</soap:Body>
</soap:Envelope>
由于地址透明性使得对信息对象的访问无需知道其地址,服务的真实地址应该在配置中介中给出,如UDDI注册。另外,对服务的调用应该在常用地址终端——如URL和URI——中指定。例如,下面的URL终端指定了对我们的股票报价服务的调用:
http://www.stocksrus:9000/services/soap/stockquote