我目前正在学习WSDL 2.0规范并检查http://www.w3.org/TR/wsdl20-primer/#basics-service
提供的示例 <interface name = "reservationInterface" >
. . .
</interface>
<binding name="reservationSOAPBinding"
interface="tns:reservationInterface"
. . . >
. . .
</binding>
<service name="reservationService"
interface="tns:reservationInterface">
<endpoint name="reservationEndpoint"
binding="tns:reservationSOAPBinding"
address ="http://greath.example.com/2004/reservation"/>
</service>
您可以在service
声明中看到我们必须指定interface
属性,尽管它已在binding
声明中指定。因此具有绑定名称 - 我们可以解析它实现的接口名称。从我的角度来看(那个不知道规范的人) - 它只是一个数据重复。
问题:指定的interface
中的service
是什么?这有什么实际的理由吗?
答案 0 :(得分:1)
我对WSDL 2.0规范不太熟悉(WSDL 1.1仍然是描述Web服务的事实上的方式),但我认为这实际上是倒退的。 <service>
需要interface
属性,而<binding>
上的属性是可选的。
http://www.w3.org/TR/wsdl20-primer/#basics-service(强调我的):
WSDL 2.0服务指定服务将支持的单个接口,以及可以访问该服务的端点位置列表。每个端点还必须引用先前定义的绑定,以指示在该端点使用哪些协议和传输格式。 服务只允许有一个界面。
http://www.w3.org/TR/wsdl20-primer/#more-bindings-reusable(强调我的):
绑定可以是可重用的(适用于任何接口),也可以是不可重用的(适用于特定接口)。 [...] 要定义可重用的绑定,绑定元素只是省略了接口属性,并省略了指定任何特定于操作和特定于故障的绑定详细信息。端点稍后可以以与不可重用绑定相同的方式引用可重用绑定。因此,可重用绑定在从端点引用时与特定接口关联,因为端点是服务的一部分,并且服务指定它实现的特定接口。
根据我的理解,您需要interface
上的<service>
来指定正在实施的界面,而interface
上的<binding>
将其使用限制为仅限界面。当两者都被指定但它们用于不同的事情时似乎有点多余。