The Difference Between RPC and Document Style WSDL |
Summary
RPC style and document style are catchphrases
frequently heard in the context of web services and the SOAP protocol.
What exactly do they mean? How do they relate to the pair of terms
"encoded/literal"? Where does the confusion about these terms come from?
This article describes the WSDL binding style and use attributes.
By
Susanne Rothaug
20 Nov 2004
20 Nov 2004
Binding Style and Use
A web service is usually described by a WSDL
(Web Services Description Language) document. In this document, the
supported web service operations and messages are described abstractly
and then bound to a concrete network protocol and message format. A
typical WSDL document consists of the following elements: "types,"
"message," and "portType" for the abstract definitions; "binding" and
"service" for the concrete specification. All of these elements are
wrapped inside a "definitions" element.
In the context of RPC and document style, it is
the binding element that we need to take a closer look at. A WSDL
binding describes how the service is bound to a messaging protocol,
either HTTP GET/POST, MIME, or SOAP. In practice, SOAP is the most
universally used protocol; it is SOAP that the RPC/document distinction
refers to. Usually HTTP(S) is used as transport protocol for the SOAP
message – "SOAP over HTTP(S)."
The <wsdl:binding> element of the WSDL
contains a pair of parameters that influence the form of the resulting
SOAP messages: binding style (RPC or document) and use (encoded or
literal). See how style and use are defined in the WSDL fragment below:
<wsdl:binding name="Config1Binding" type="prt0:CreditLimitLocalWebServiceVi_Document">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
<wsdl:operation name="creditLimitCheck">
<soap:operation soapAction="" />
<wsdl:input>
<soap:body use="literal" parts="parameters" />
</wsdl:input>
<wsdl:output>
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
The "Style" Attribute
WSDL 1.1 specifies the style of the binding as
either RPC or document. This choice corresponds to how the SOAP payload -
i.e., how the contents of the <soap:Body> element - can be
structured. Here are some details of how each style affects the contents
of <soap:Body>:
-
Document: the content of <soap:Body> is specified by XML Schema defined in the <wsdl:type> section. It does not need to follow specific SOAP conventions. In short, the SOAP message is sent as one "document" in the <soap:Body> element without additional formatting rules having to be considered. Document style is the default choice.
-
RPC: The structure of an RPC style <soap:Body> element needs to comply with the rules specified in detail in Section 7 of the SOAP 1.1 specification. According to these rules, <soap:Body> may contain only one element that is named after the operation, and all parameters must be represented as sub-elements of this wrapper element.
As a consequence of the freedom of choice that
the document style offers, the SOAP messages conforming to a document
style WSDL may look exactly the same as the RPC equivalent.
The decisive question now is: What are the
consequences of choosing one option or another? Why choose RPC over
document, or document over RPC? In many cases, the SOAP messages
generated from either RPC or document style WSDLs look exactly the same -
so why offer the choice at all? The reason may be found in the history
of the SOAP standard.
SOAP has its roots in synchronous remote
procedure calls over HTTP and the appearance of the document accordingly
followed these conventions. Later, it was seen as a simplification to
use arbitrary XML in the SOAP body without adhering to conventions. This
preference is reflected in the document style WSDL documents. So far,
both options are represented in the WSDL specification and the choice of
one or the other is mainly a question of personal taste since most SOAP
clients today accept both versions.
The "Use" Attribute
The use attribute specifies the encoding rules
of the SOAP message. This is also done within the <wsdl:binding>
element, as seen in the example above. The value can be encoded or
literal. It refers to the serialization rules followed by the SOAP
client and the SOAP server to interpret the contents of the <Body>
element in the SOAP payload.
-
use="literal" means that the type definitions literally follow an XML schema definition.
-
use="encoded" refers to the representation of application data in XML, usually according to the SOAP encoding rules of the SOAP 1.1 specification. The rules to encode and interpret a SOAP body are in a URL specified by the encodingStyle attribute. Encoded is the appropriate choice where non-treelike structures are concerned, because all others can be perfectly described in XML Schema.
The combination of the style and use attributes leads to four possible style/use pairs:
-
RPC/encoded
-
RPC/literal
-
document/encoded
-
document/literal
Some of these combinations are rarely used in
practice, such as document/encoded. In general, the literal use is
gaining importance, and as far as RPC/encoded is concerned, the Web
Services Interoperability Organization (WS-I) in its Basic Profile
Version 1.0a of August 2003 ruled out the use of SOAP encoding with web
services. Document/literal and RPC/literal will be the only allowed
style/use combinations in the future.
No comments:
Post a Comment