如果我在WSDL
文档中理解正确,我们可以用简单的术语说:
portype section:
可以与OO中的接口进行比较
语言,并描述服务提供的操作。
binding section:
指定可以通过哪些协议访问操作
(e.g. SMTP、HTTP等)。
services section:
指示所定义的每个绑定的端点。
如果我说错了,请纠正我。
如果这是正确的,当我们使用AXIS ADB和Eclipse EE集成的AXIS工具创建客户端时,为什么在示例化存根时还需要提供一个URL作为服务的端点?
MultiplierImplStub stub=newMultiplierImplStub("http://localhost:8080/ProductServer/services/MultiplierImpl");
分析服务的WSDL时自动生成的stub不应该已经知道端点是什么吗?
编辑:
为什么客户端中指定的端点与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>
1条答案
按热度按时间cwxwcias1#
问得好!存根在生成时知道端点是什么,但以后这些端点可能会发生变化,您不希望再次手动重新生成存根并重新部署它,而只是更改应用程序中的配置参数。在运行时为每个服务调用重新生成存根也不是一个好主意,我相信您会同意这一点。
具有提供端点的能力非常方便,原因有很多:有时候,您在实作阶段无法即时存取Web服务,而WSDL会在工作开始前作为双方团队之间的共同协定。此时可能会知道最终的URL。此外,您可能需要在不同的环境中进行测试,在预生产和生产之前-只要在组态中稍微做一点调整,就可以轻易地进行测试。而不是在应用程序中为每个环境使用不同的存根和不同的逻辑。
WSDL中的端点对于Web服务的可发现性非常有用,因为服务已经在生产中,而且端点的更改不会发生。它简化了新客户端使用Web服务的过程。但即使这样,也最好将端点视为变量,因为这样可以增加灵活性,以防万一。