What's the difference between <binding> and <portType> in WSDL?
Asked Answered
A

5

59

Both <binding> and <portType> seem to define an operation and its message. I don't quite understand, why are they both necessary?

Apollyon answered 22/12, 2010 at 16:34 Comment(1)
This is a good question, I don't think any of the answers below seem to address it. Distinguishing them only makes sense if there's a many to many relationship, which seems to be impossible when the <binding> tag can only reference one portType. There's probably a historical reason, rather than a practical one.Calchas
P
40

portType (Analogs to Java interface)

  • PortType is an abstraction part of WSDL.
  • An abstract set of operations supported by one or more endpoints.

binding

  • Binding is an concrete part of WSDL.
  • Describes how the operation is invoked by specifying concrete protocol and data format specifications for the operations and messages.
  • bindings are three types

    1. SOAP Binding:
      SOAP binding allows either document or rpc style with either encoding or literal. Encoding indicates how a data value should be encoded in an XML format (These rules specify how "something" is encoded/serialized to XML and then later decoded/de-serialized from XML back to "something"). Literal means that the data is serialized according to a schema (this is just plain XML data). With transportation type http, jms, smtp...

    2. HTTP GET & POST binding:
      WSDL includes a binding for HTTP 1.1's GET and POST verbs in order to describe the interaction between a Web Browser and a web site.

    3. MIME binding: WSDL includes a way to bind abstract types to concrete messages in some MIME format.


enter image description here

In WSDL 2.0 :

  • PortTypes renamed to interfaces
  • Ports renamed to endpoints
  • Removed message constructs

Source


Useful links

Patinous answered 12/8, 2015 at 6:45 Comment(0)
S
26

Interfaces (wsdl:portType)

The WSDL portType element defines a group of operations (sometimes known as an interface).

The operation elements contain a combination of input and output elements. There can be a fault element when you have an output element. The order of these elements defines the message exchange pattern (MEP) (One-way, Request – Response, etc)

enter image description here

wsdl:binding

The WSDL binding element describes the concrete details of using a particular portType with a given protocol.

enter image description here

Shiva answered 14/3, 2013 at 11:48 Comment(1)
You could also have cited your source: msdn.microsoft.com/en-us/library/ms996486.aspxChev
O
13

PortType defines the abstract interface of a web service.
Conceptually it is like a Java interface since it defines an abstract type and related methods.
In WSDL the port type is implemented by the binding and service elements which indicate the protocols, encoding schemes etc to be used by a web service implementation
I.e. the binding specifies concrete implementation details and essentially maps a portType to a set of protocols (HTTP and SOAP) message styles (Document/RPC) and encodings (literal)
Is the distiction clear now?

Orwin answered 22/12, 2010 at 17:2 Comment(2)
Should line 1 read 'The Port Type defines the abstract interface of a web service'?Curiosity
The analogy was very helpful. Thank you very much.Oriole
B
4

portType
A single Web service can support a number of different protocols. The structure of the data depends on the protocol that you use to invoke the Web service. Because of this, you need a way to map from the operations to the endpoints from which they can be accessed. The portType element takes care of this mapping.

You can place a portType definition for each of the protocols available to you for this Web service. For instance, you can have individual portType definitions for using SOAP, HTTP-POST, and HTTP-GET. The operation name is the method available from the Web service.

binding
You can define how the end user binds to a port where the operation is obtainable. You do this by using the element.

Bianco answered 30/3, 2015 at 18:9 Comment(0)
T
2

wsdl:portType goes with wsdl:operation i.e. we are in the realms of messages and xml as such

but wsdl:binding goes with soap:binding and soap:operation i.e. we are in the realm of encoding, addresses, headers and rpc

e.g. from : 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/"/>

...

and from paragraph 3.2 all possible details about lower level communication stuff:

The SOAP Binding extends WSDL with the following extension elements:

<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>
Typesetter answered 15/11, 2015 at 22:7 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.