A WSDL document defines services as
collections of network endpoints, or ports. In
WSDL, the abstract definition of endpoints and messages is
separated from their concrete network deployment or data format
bindings. This allows the reuse of abstract definitions: messages,
which are abstract descriptions of the data being exchanged, and port
types which are abstract collections of operations.
The concrete protocol and data format specifications for
a particular port type constitutes a reusable binding.
A port is defined by associating a network address with a
reusable binding, and a collection of ports define a service.
Hence, a WSDL document uses the following elements in the
definition of network services:
Services are defined using six major elements:
-
types,
which provides data type definitions used to describe the
messages exchanged.
-
message,
which represents an abstract definition of the data being
transmitted. A message consists of logical parts,
each of which is associated with a definition within some
type system.
-
portType,
which is a set of abstract operations. Each
operation refers to an input message and output messages.
-
binding,
which specifies concrete protocol and data format
specifications for the operations and messages defined by
a particular portType.
-
port,
which specifies an address for a binding, thus defining a
single communication endpoint.
-
service,
which is used to aggregate a set of related ports.
If the values being passed are part1=1, part2=2, part3=3, the
request format would be as follows for each port:
port1: GET, URL="http://example.com/o1/A1B2/3"
port2: GET, URL="http://example.com/o1?p1=1&p2=2&p3=3
port3: POST, URL="http://example.com/o1", PAYLOAD="p1=1&p2=2&p3=3"
For each port, the response is either a GIF or a JPEG image.
Example 6. GET and FORM POST
returning GIF or JPG
<definitions .... >
<message name="m1">
<part name="part1" type="xsd:string"/>
<part name="part2" type="xsd:int"/>
<part name="part3" type="xsd:string"/>
</message>
<message name="m2">
<part name="image" type="xsd:binary"/>
</message>
<portType name="pt1">
<operation name="o1">
<input message="tns:m1"/>
<output message="tns:m2"/>
</operation>
</portType>
<service name="service1">
<port name="port1" binding="tns:b1">
<http:address location="http://example.com/"/>
</port>
<port name="port2" binding="tns:b2">
<http:address location="http://example.com/"/>
</port>
<port name="port3" binding="tns:b3">
<http:address location="http://example.com/"/>
</port>
</service>
<binding name="b1" type="pt1">
<http:binding verb="GET"/>
<operation name="o1">
<http:operation location="o1/A(part1)B(part2)/(part3)"/>
<input>
<http:urlReplacement/>
</input>
<output>
<mime:content type="image/gif"/>
<mime:content type="image/jpeg"/>
</output>
</operation>
</binding>
<binding name="b2" type="pt1">
<http:binding verb="GET"/>
<operation name="o1">
<http:operation location="o1"/>
<input>
<http:urlEncoded/>
</input>
<output>
<mime:content type="image/gif"/>
<mime:content type="image/jpeg"/>
</output>
</operation>
</binding>
<binding name="b3" type="pt1">
<http:binding verb="POST"/>
<operation name="o1">
<http:operation location="o1"/>
<input>
<mime:content type="application/x-www-form-urlencoded"/>
</input>
<output>
<mime:content type="image/gif"/>
<mime:content type="image/jpeg"/>
</output>
</operation>
</binding>
</definitions>
The HTTP GET/POST Binding extends WSDL with the following
extension elements:
<definitions .... >
<binding .... >
<http:binding verb="nmtoken"/>
<operation .... >
<http:operation location="uri"/>
<input .... >
<-- mime elements -->
</input>
<output .... >
<-- mime elements -->
</output>
</operation>
</binding>
<port .... >
<http:address location="uri"/>
</port>
</definitions>
These elements are covered in the subsequent sections.
4.3 http:address
The location attribute specifies the base URI for the
port. The value of the attribute is combined with the
values of the location attribute of the http:operation binding
element. See section 4.5 for
more details.
The http:binding element indicates that this binding
uses the HTTP protocol.
<definitions .... >
<binding .... >
<http:binding verb="nmtoken"/>
</binding>
</definitions>
The value of the required verb attribute indicates the
HTTP verb. Common values are GET or POST, but others may be
used. Note that HTTP verbs are case sensitive.