为什么我们指定服务的接口?

时间:2012-10-03 09:24:22

标签: wsdl wsdl-2.0

我目前正在学习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是什么?这有什么实际的理由吗?

1 个答案:

答案 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>将其使用限制为仅限界面。当两者都被指定但它们用于不同的事情时似乎有点多余。