也许我并不完全理解UDDI的全部内容,但我想一种在一台服务器上发布所有提供服务的技术?
通过“服务器”,我应该理解物理地址(如www.example.com
)或仅仅是编程工具(例如,谈论NuSOAP是一个PHP文件,包括{ {1}})?
因此,如果服务器只是PHP文件,则将nusoap.php
附加到文件将为我提供所有已注册函数的列表。这已经是所谓的UDDI吗?
最后, NuSOAP是否支持UDDI?
答案 0 :(得分:2)
看起来你有些事情混淆了所以让我们试着澄清一些混乱。首先是一些定义!
web service 是允许机器进行机器通信的一种方式。当您通过网络公开某些操作时,您将创建一个Web服务。其他机器使用这些操作与您的机器“对话”,它们成为您的Web服务的客户。客户端从您的Web服务请求信息,并表示他们“使用”您的Web服务。当然,如果没有提供商,您就无法拥有一个消费者,因此您拥有一个Web服务“提供者”。
但机器如何知道如何相互交谈?
SOAP 是用于交换信息的协议。它通过将消息包装在标准信封+标题+正文请求中来定义讨论的共同点(机器会说同一种语言)。
但消息本身怎么样?这是如何定义的?当您公开Web服务时,您必须告诉其他人如何实现客户端(即记录您的操作,以及要发送或期望的消息)。您可以使用PDF来执行此操作,例如您详细说明操作,消息格式,参数类型等。但有更好的方法,
允许您动态生成客户端的一个:WSDL(按照惯例可通过在Web服务端点地址上添加?wsdl
访问)。
WSDL 提供机器可读的描述,说明如何调用服务,预期的参数以及返回的内容(基本上您必须尊重哪些合同才能叫它)。有些工具可以读取WSDL并为您的Web服务客户端创建代码,或者提供实用程序功能,使您可以更轻松地调用Web服务,而无需采用低级别的消息操作。
NuSOAP 就是这样一个工具。它是一组允许您使用SOAP Web服务的PHP类。
但是在你拥有能够进行呼叫所需的一切之后,你怎么知道在哪里 您可以通过网络服务地址拨打电话吗?
作为提示,您可以在WSDL but that can't always be reliable中找到它,因此您必须从Web服务提供商处获取它。然后,您可以使用该地址一次又一次地调用Web服务。
但是,如果提供商对其基础架构进行了一些更改,现在Web服务是否在另一个地址上公开,该怎么办?您的客户端不再有效,因为它连接旧地址。您还必须从提供商处获取地址。如果你能在运行时以某种方式发现这个地址然后连接到Web服务,那会不会更容易?
如果提供商在不同地址(作为备份)多次暴露相同的服务,该怎么办?您可以连接到一个,如果出现问题,您可以搜索暴露相同合同的另一个Web服务。
但是,如果我们谈论合同,为什么要限制自己到一个提供商?为什么不搜索公开某个合同的服务而不管提供商? ....在这一点上,当人们想象一个服务将通过使用注册表充当网络服务的黄色(three colors actually)页面而自发地相互联系的事情时,事情就会失控。
UDDI 是一个注册表,其中生产者注册其Web服务,而消费者查询注册表以查找具有特定合同的Web服务,然后连接到他们找到的内容。互动是这样的:
http://juddi.apache.org/docs/3.x/userguide/html/chap-UDDI_Registry.html
这个想法适用于定义合同并创建实现的企业,所有Web服务都具有已知的质量和功能。但在线它不起作用。
如果没有适当的修正测试和验证以及保证Web服务不会在不受欢迎的方向上发展或者根本就不再发展的事情,那么就没有正确的方法来验证服务是否真正在做什么做广告。
由于所有这些,(公共)UDDI实际上并没有在野外使用,但在企业中有所用,因为企业签署了定义规则的合同,这些规则保证从(私有)UDDI返回的内容是真实的东西。
总之(为了确保我完全解决您的问题),UDDI是提供商发布有关其Web服务的信息的地方。这包括规范,接口等,以及端点地址。它只是关于Web服务的信息,而不是Web服务本身,因此nusoap.php
不会发布到注册表。
至于支持UDDI的NuSOAP,你不清楚你对它的理解。 UDDI is accessible with a SOAP API因此您可以使用NuSOAP简单地访问它, 如果这就是你要问的。