WSDL 和 AXIS ADB

WSDL and AXIS ADB

如果我在WSDL文档中理解正确,我们可以简单地说:

如果我说错了,请纠正我。

如果这是正确的,当我们使用 AXIS ADB 和 Eclipse EE 集成 AXIS 工具创建客户端时,为什么我们还需要在实例化存根时提供 URL 作为服务的端点?

MultiplierImplStub stub=newMultiplierImplStub("http://localhost:8080/ProductServer/services/MultiplierImpl");

解析服务的 WSDL 自动构建的存根不应该已经知道端点是什么吗?

编辑:

以及为什么客户端中指定的端点与 WSDL 中定义的任何端点都不匹配?

<wsdl:service name="MultiplierImpl">
<wsdl:port name="MultiplierImplHttpSoap11Endpoint" binding="ns:MultiplierImplSoap11Binding">
<soap:address location="http://localhost:8080/AxisTestProjectServer/services/MultiplierImpl.MultiplierImplHttpSoap11Endpoint/"/>
</wsdl:port>
<wsdl:port name="MultiplierImplHttpSoap12Endpoint" binding="ns:MultiplierImplSoap12Binding">
<soap12:address location="http://localhost:8080/AxisTestProjectServer/services/MultiplierImpl.MultiplierImplHttpSoap12Endpoint/"/>
</wsdl:port>
<wsdl:port name="MultiplierImplHttpEndpoint" binding="ns:MultiplierImplHttpBinding">
<http:address location="http://localhost:8080/AxisTestProjectServer/services/MultiplierImpl.MultiplierImplHttpEndpoint/"/>
</wsdl:port>
</wsdl:service>

好问题!存根在其生成时知道端点是什么,但这些端点可能会在未来发生变化,您不想再次手动重新生成存根并重新部署它,而只是更改配置参数你的申请。在每次服务调用时在运行时重新生成存根也不是一个好主意,我相信你会同意的。

由于多种原因,能够提供端点很方便:有时您无法在实施时实时访问 Web 服务,并且在工作开始之前,WSDL 被用作双方团队之间的相互协议。最终的 URL 遗嘱可能会在此时揭晓。此外,您可能需要在预生产和生产之前在不同的环境中进行测试 - 这很容易在配置中发生,而不是在每个环境的应用程序中使用不同的存根和不同的逻辑。

WSDL 中的端点非常适合 Web 服务的可发现性,当服务已经投入生产时,预计不会发生端点更改。它简化了新客户使用 Web 服务的过程。但即便如此,最好将端点视为变量,因为它增加了灵活性,以防万一。