WSDL 中的 <binding> 和 <portType> 有什么区别?

问题描述 投票:0回答:5

<binding>
<portType>
似乎都定义了一个操作及其消息。我不太明白,为什么它们都是必要的?

web-services soap wsdl jax-ws
5个回答
39
投票

portType(类似于 Java 接口)

  • PortType 是 WSDL 的抽象部分。
  • 由一个或多个端点支持的一组抽象操作。

绑定

  • 绑定是 WSDL 的具体部分。
  • 通过指定操作和消息的具体协议和数据格式规范来描述如何调用操作。
  • 绑定分为三种类型

    1. SOAP 绑定:
      SOAP 绑定允许

      document
      rpc
      style
      encoding
      literal
      Encoding 指示如何将数据值编码为 XML 格式(这些规则指定如何将“某物”编码/序列化为 XML,然后如何从 XML 解码/反序列化回“某物”)。 Literal 表示数据根据模式进行序列化(这只是纯 XML 数据)。传输类型http、jms、smtp...

    2. HTTP GET 和 POST 绑定:
      WSDL 包含 HTTP 1.1 的 GET 和 POST 动词的绑定,以便描述 Web 浏览器和网站之间的交互。

    3. MIME 绑定: WSDL 包括一种将抽象类型绑定到某种 MIME 格式的具体消息的方法。


在 WSDL 2.0 中:

  • PortTypes 重命名为接口
  • 端口重命名为端点
  • 删除了消息结构

来源


有用的链接


26
投票

接口(wsdl:portType)

WSDL portType 元素定义一组操作(有时称为接口)。

操作元素包含输入和输出元素的组合。当有输出元件时,可能存在故障元件。这些元素的顺序定义了消息交换模式 (MEP)(单向、请求 - 响应等)

enter image description here

wsdl:绑定

WSDL 绑定元素描述了使用给定协议的特定端口类型的具体细节。

enter image description here


12
投票

PortType 定义 Web 服务的抽象接口
从概念上讲,它就像 Java 接口,因为它定义了抽象类型和相关方法。
在 WSDL 中,端口类型由绑定和服务元素实现,这些元素指示Web 服务实现
使用的协议、编码方案等 IE。绑定指定具体实现细节,并且本质上将 portType 映射到一组协议(HTTP 和 SOAP)消息样式(文档/RPC)和编码(文字)
现在区分清楚了吗?


5
投票

端口类型
一个单个 Web 服务可以支持多个不同的协议。数据的结构取决于您用来调用 Web 服务的协议。因此,您需要一种方法将操作映射到可以访问它们的端点portType 元素负责此映射。

您可以为该 Web 服务可用的每个协议放置一个 portType 定义。例如,您可以使用单独的 portType 定义来使用 SOAP、HTTP-POST 和 HTTP-GET。操作名称是可从 Web 服务获得的方法。

装订
您可以定义最终用户如何绑定到可获取操作的端口。您可以通过使用该元素来完成此操作。


2
投票

wsdl:portType 与 wsdl:operation 一起使用 也就是说,我们处于消息和 xml 的领域

但是 wsdl:binding 与soap:binding 和soap:operation 一起使用 即我们处于编码、地址、标头和 rpc 领域

例如来自:http://www.w3.org/TR/wsdl#_soap-b

 <binding name="StockQuoteSoap" type="tns:StockQuotePortType">
        <soap:binding style="document" transport="http://example.com/smtp"/>
        <operation name="SubscribeToQuotes">
           <input message="tns:SubscribeToQuotes">
               <soap:body parts="body" use="literal"/>
               <soap:header message="tns:SubscribeToQuotes" part="subscribeheader" use="literal"/>

......

<binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetTradePrice">
       <soap:operation soapAction="http://example.com/GetTradePrice"/>
       <input>
           <soap:body use="encoded" namespace="http://example.com/stockquote"
                      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>

...

以及第 3.2 段中有关较低级别通信内容的所有可能的细节:

SOAP 绑定使用以下扩展元素扩展了 WSDL:

<definitions .... >
    <binding .... >
        <soap:binding style="rpc|document" transport="uri">
        <operation .... >
           <soap:operation soapAction="uri"? style="rpc|document"?>?
           <input>
               <soap:body parts="nmtokens"? use="literal|encoded"
                          encodingStyle="uri-list"? namespace="uri"?>
               <soap:header message="qname" part="nmtoken" use="literal|encoded"
                            encodingStyle="uri-list"? namespace="uri"?>*
                 <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                                   encodingStyle="uri-list"? namespace="uri"?/>*
               <soap:header>                                
           </input>
           <output>
               <soap:body parts="nmtokens"? use="literal|encoded"
                          encodingStyle="uri-list"? namespace="uri"?>
               <soap:header message="qname" part="nmtoken" use="literal|encoded"
                            encodingStyle="uri-list"? namespace="uri"?>*
                 <soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
                                   encodingStyle="uri-list"? namespace="uri"?/>*
               <soap:header>                                
           </output>
           <fault>*
               <soap:fault name="nmtoken" use="literal|encoded"
                           encodingStyle="uri-list"? namespace="uri"?>
            </fault>
        </operation>
    </binding>

    <port .... >
        <soap:address location="uri"/> 
    </port>
</definitions>
© www.soinside.com 2019 - 2024. All rights reserved.