What is rpc-literal anyway?
Although it’s a longtime ago, I want to follow up with the promised explanations for Issue 8:
Prolog: WS BP 1.0 prohibits the usage of rpc-encoded but explicitly allows rpc-literal. But what is rpc-literal anyway?
Rpc stands for remote procedure call. If you want to apply this technology in loosely coupled environments, you’ll get a problem: The caller must know the exact signature and method name of the target implementation; otherwise it won’t be able to call it. Although this is definitely not what we’re looking for within a Web Service enabled environment, nobody prevents you from doing so:
Rpc-literal Web Services use the rpc style of message assembling but support the literal way of describing the types that are passed by a procedure: In this case, literal means that there exists a schema for every parameter type but not for the message body itself. The message body gets constructed based on some simple rules:
- The procedure (or method) name defines the name of the message
- The different part names within <wsdl:message> are used for the argument names
Let’s have a look at the four different artifacts, the CLR signature, the wsdl message, the binding and the soap message:
A typical rpc signature for an addition request looks the following (note, there is no message):
int Add (int a, int b)
The corresponding wsdl message is named after its method and adds a part for each argument:
<message name=“Add”>
<part name=“a” type=“xsd:int”>
<part name=“b” type=“xsd:int”>
</message>
Within the wsdl bindings, the style is set to rpc and the soap body namespace must be defined (the namespace will be used for the top-level message elements):
<wsdl:binding name=“…" type="tns:…">
<soap:binding style=“rpc“ …>
<wsdl:operation name=“Add">
<wsdl:input name=“Add">
<soap:body namespace="operationNS" use="literal"/>
</wsdl:input>
</wsdl:operation>
</wsdl:binding>
The soap message gets assembled by using the operation name and the corresponding message parts:
<soap:body>
<x:Add xmlns:x=“operationNS”>
<a>200</a>
<b>400</b>
</x:Add>
</soap:body>
The next post in this answer series is going to discuss how you can consume rpc-literal Web Services using .NET. Stay tuned…
Comments
- Anonymous
November 21, 2007
PingBack from http://manoftoday.wordpress.com/2007/11/13/network/ - Anonymous
March 28, 2008
PingBack from http://countyanimalshelterblog.info/beat-schweglers-2-cents-what-is-rpc-literal-anyway/