WSDL中定义的多端口服务

use*_*023 12 service port soap wsdl web-services

一个不同的问题,与基本问题.在我的WSDL文件的末尾.

<wsdl:service name="Lighting">
    <wsdl:port name="SwitchPower" binding="tns:SwitchPower">
        <soap:address location="http://localhost:8080/Lighting/SwitchPower/" />
    </wsdl:port>
    <wsdl:port name="Dimming" binding="tns:Dimming">
        <soap:address location="http://localhost:8080/Lighting/Dimming/" />
    </wsdl:port>
</wsdl:service>
Run Code Online (Sandbox Code Playgroud)

具有两个端口的相同服务.这样对吗?

如果不是,规范的规则是什么?

Jop*_*ops 12

是.想象一下,在现实生活中,这确实是可能的:

航运码头:多端口服务的理念

在此输入图像描述

请参阅W3 WSDL规范的第2.7节.您可以看到*表示您可以在服务下拥有多个端口.实际上,服务将一组相关端口组合在一起.但有几点需要注意.

W3 WSDL规范的第2.7节

服务将一组相关端口组合在一起:

<wsdl:definitions .... >
    <wsdl:service name="nmtoken"> *
        <wsdl:port .... />*
    </wsdl:service>
</wsdl:definitions>
Run Code Online (Sandbox Code Playgroud)

name属性在封闭的WSDL文档中定义的所有服务中提供唯一名称.

服务中的端口具有以下关系:

  • 没有端口彼此通信(例如,一个端口的输出不是另一个端口的输入).
  • 如果服务具有多个共享端口类型但使用不同绑定或地址的端口,则端口是备选方案.每个端口提供语义上等效的行为(在每个绑定强加的传输和消息格式限制内).这允许WSDL文档的使用者基于某些标准(协议,距离等)选择要与之通信的特定端口.
  • 通过检查其端口,我们可以确定服务的端口类型.这允许WSDL文档的使用者基于其是否支持多种端口类型来确定它是否希望与特定服务进行通信.如果端口类型的操作之间存在某种隐含关系,并且必须存在整个端口类型集以完成特定任务,这将非常有用.