| By Rickland Hollar | Article Rating: |
|
| October 27, 2003 12:00 AM EST | Reads: |
19,999 |
To RPC, or not to RPC: that is the question. Whether 'tis nobler in the mind to suffer the control and dependency of coupling, or to take arms against a sea of troubles, and by opposing, end them?
The Simple Object Access Protocol (SOAP) offers two messaging styles: RPC (Remote Procedure Call) and document style. One is for creating tightly coupled, inter-object style interfaces for Web services components; the other is for developing loosely coupled, application-to-application and system- to-system interfaces. Some of you may have questions about the differences in the styles or the problems they are designed to solve. My goal here is to answer those questions. I'll first present the two styles in enough detail for you to gain an appreciation of their relative strengths and weaknesses; I'll then look at guidelines for their use.
The first question you may have is what is an RPC? An RPC is a way for an application running in one execution thread on a system to call a procedure belonging to another application running in a different execution thread on the same or a different system. RPC interfaces are based on a request-response model where one program calls, or requests a service of, another across a tightly coupled interface. In Web services applications, one service acts as a client, requesting a service; the other as a server, responding to that request. RPC interfaces have two parts: the call-level interface seen by the two applications, and the underlying protocol for moving data from one application to the other.
The call-level interface to an RPC procedure looks just like any other method call in the programming language being used. It consists of a method name and a parameter list. The parameter list is made up of the variables passed to the called procedure and those returned as part of its response. This is true on both sides of the interface. Both sides believe they are calling, or are being called by, a locally running procedure. Wiring in between hides the complexity of moving data between the two applications.
For Web services, SOAP defines the wiring between the calling and called procedures. At the SOAP level, the RPC interface appears as a series of highly structured XML messages moving between the client and the server where the <Body> of each SOAP message contains an XML representation of the call or return stack.
The transformation from call-level interface to XML and back occurs through the magic of two processes – marshaling and serialization. Figure 1 illustrates the major components and steps involved in this process.

The server goes through the reverse process to extract the information it needs. A listener service on the server deserializes the transport stream and calls a proxy stub on the server that unmarshals the parameters, decodes and binds them to internal variables and data structures, and invokes the called procedure. The listener process may be, for example, a J2EE servlet, JSP (JavaServer Page), or Microsoft ASP (Active Server Page). The client and server reverse roles and the inverse process occurs to return the server's response to the client.
You may be curious about the distinction I make between marshaling and serialization, having seen the terms used interchangeably. I distinguish between them because with Web services different standards define the rules for the two processes. SOAP defines the rules for marshaling and encoding data into XML messages, but doesn't specify how data is actually serialized across the interface. SOAP can bind to any protocol (usually either HTTP or Simple Mail Transport Protocol [SMTP]) for serialization, which means the specifications for those protocols actually define the serialization rules.
Section 7 of the SOAP specification defines the rules for marshaling RPC calls into XML messages (the most recent version of the SOAP 1.2 specification moves this information to the Adjuncts section, but the rules remain the same). Section 7 says to encode RPC method calls and responses as hierarchical XML elements, or structures, where the rootlevel element name is the method name in the case of the request and an arbitrary value in the case of the response, the structure's child elements are the method's parameters or return values; and each parameter or return value's elements are the data value or values it represents.
Section 5 of the SOAP specification defines SOAP's built-in rules for encoding data values. Encoding is necessary any time the recipient needs to interpret an element's value as something other than a literal string, i.e. as an integer, floating point number, or MIME type. XML Schema offers an increasingly popular alternative that has all but obsolesced Section 5 encoding. Listings 1 and 2 illustrate the two options for a skeletal RPC method call; the encodingStyle attribute tells the recipient which scheme is being used.
With this background on RPC style in place, the next question is how does document- style messaging differ? The difference is primarily in the control you have over the marshaling process. With RPC-style messaging, standards govern that process. With document- style messaging, you make the decisions: you convert data from internal variables into XML; you place the XML into the <Body> element of the encapsulating SOAP document; you determine the schema(s), if any, for validating the document's structure; and you determine the encoding scheme, if any, for interpreting data item values. The SOAP document simply becomes a wrapper containing whatever content you decide. For example, the SOAP document shown in Listing 3 contains an XML namespace reference, http://www.xyz.com/genealogy, that presumably includes all the information a receiving program needs for validating the message's structure and content, and for correctly interpreting data values.
Figure 2 illustrates the steps in a typical document-style message exchange. If you compare the steps involved in this process with those involved in processing an RPCstyle message from Figure 1, you will notice they are essentially parallel processes.

The SOAP server reverses the process, potentially using a different XSLT, to validate, extract, and bind the information it needs from the XML document to its own internal variables. The roles reverse and the two follow inverse processes for returning and accessing any response values. The rules guiding the marshaling process are the primary difference between this process and that for RPC-style messages. With document-style, you as the SOAP client's author create those rules.
Strengths and Weaknesses
Now that we've looked at both styles in some detail, we can discuss their relative strengths and weaknesses.
RPC-style messaging maps to the objectoriented, component-technology space. It is an alternative to other component technologies such as DCOM and CORBA where component models are built around programmable interfaces and languages such as Java and C#. RPC-style messaging's strength in this space lies in its platform independence. It offers a standards-based, platform-independent component technology, implemented over standard Internet protocols. One of the benefits of this style's XML layer is that clients and servers can use different programming languages, or technologies, to implement their respective side of the interface, which means one side can choose one set of technologies, such as J2EE's JAX-RPC, while the other chooses a completely different set, such as .NET's C#. RPC-style messaging's standards heritage can be an important consideration in hybrid environments (one using multiple technologies such as J2EE and .NET) and can provide a transition path between different technologies.
RPC-style messaging's weaknesses include:
How do these drawbacks compare to those found in other component technologies? The coupling and synchronicity issues are common to RPC-based component technologies. so they are really not discriminators when making comparisons between these technologies. The marshaling and serialization overhead is greater for RPC-style messaging and places this messaging style at a relative disadvantage. However, with today's high-speed processors and networks, performance is generally not an issue.
Document-style messaging is clearly an option in any situation where an XML document is one of the interface parameters. It is ideal for passing complex business documents, such as invoices, receipts, customer orders, or shipping manifests. Documentstyle messaging uses an XML document and a stylesheet to specify the content and structure of the information exchanged across the interface, making it an obvious choice in situations where a document's workflow involves a series of services where each service processes a subset of the information within the document. Each service can use an XSLT to validate, extract, and transform only the elements it needs from the larger XML document; with the exception of those elements, the service is insensitive to changes in other parts of the document. The XSLT insulates the service from changes in the number, order, or type of data elements being exchanged. As long as the service creating the document maintains backwards compatibility, it can add or rearrange the elements it places into a document without affecting other services. Those services can simply ignore any additional data. Document-style messaging is also agnostic on the synchronicity of the interface; it works equally well for both synchronous and asynchronous interfaces.
Document-style messaging's weaknesses include:
Given these drawbacks, you may ask whether document-style messaging really is an alternative. The answer is yes. There are two compelling reasons to use documentstyle messaging. One is to gain the independence it provides. Its strength lies in decoupling interfaces between services to the point that they can change completely independently of one another. The other is that document-style messaging puts the full power of XML for structuring and encoding information at your disposal. The latter is one reason many consider document-style superior to RPC-style messaging.
Summary
Given their relative strengths and weaknesses, what guidelines should you use in choosing between the two messaging styles? RPC-style messaging's strength is as a bridging component technology. It is a good option for creating new components and for creating interfaces between Web services and existing components – you simply wrap existing components with RPC-style Web services interfaces. RPC-style messaging is also an excellent component standard in situations where you are using multiple technologies, such as J2EE and .NET, and want to develop sharable components. So, there is clear justification for adopting an RPC style as a standard in these roles.
Document-style messaging's strengths are in situations where an XML document is part of the data being passed across the interface, where you want to leverage the full power of XML and XSL, and in instances where you want to minimize coupling between services forming an interface, such as in application-to-application and systemto- system interfaces. So, there is clear precedent here as well.
Neither style is a panacea. You must consider the relative strengths and weaknesses of each against your requirements. With these guidelines in mind, however, it is safe to adopt either based on your specific needs.
Published October 27, 2003 Reads 19,999
Copyright © 2003 SYS-CON Media, Inc. — All Rights Reserved.
Syndicated stories and blog feeds, all rights reserved by the author.
More Stories By Rickland Hollar
Rickland Hollar is a senior applications architect with the Central Intelligence Agency with over 30 years of experience in the industry. The views expressed in this article are his own and not necessarily those of the Agency. Prior to joining the CIA, he was president of a Virginia-based software development firm.
![]() |
David 11/03/03 07:58:27 PM EST | |||
Has there been any study as to which style is more interoperable? It seems that .NET and WS-I are standardizing on the document approach over the RPC approach. |
||||
- The Top 150 Players in Cloud Computing
- SYS-CON.TV: Cloud Computing Expo Power Panel
- Commercial vs Federal Cloud Computing
- Why IBM’s Server Chief Got Busted
- An Interview with Federal CIO Nominee Vivek Kundra
- SOA World Power Panel on SYS-CON.TV
- 1st Annual GovIT Expo: Letter from the Technical Chair
- Deputy CIO of the CIA to Keynote 1st Annual GovIT Expo
- Stock in Focus: Dragon Capital
- 1st Annual Government IT Conference & Expo: Themes & Topics
- The Top 150 Players in Cloud Computing
- SOA in the Cloud - Monitoring and Management for Reliability
- How to Diagnose Java Resource Starvation
- SYS-CON.TV: Cloud Computing Expo Power Panel
- Commercial vs Federal Cloud Computing
- Software AG Named "Gold Sponsor" of SOA World Conference & Expo 2009 East
- Why IBM’s Server Chief Got Busted
- IBM & Cloud Computing: How "SOA in the Cloud" Can Produce Real Change
- An Interview with Federal CIO Nominee Vivek Kundra
- SYS-CON's Cloud Expo Adds Two New Tracks
- The i-Technology Right Stuff
- Who Are The All-Time Heroes of i-Technology?
- Get the Message
- Where Are RIA Technologies Headed in 2008?
- Success, Arrogance, Rise and Fall
- i-Technology Viewpoint: Is Web 2.0 the Global SOA?
- i-Technology Viewpoint: Thinking Outside the VC Box
- ESB Myth Busters: 10 Enterprise Service Bus Myths Debunked
- i-Technology Viewpoint: When to Leave Your First IT Job
- SOA Web Services Edge Conference Coverage on SYS-CON.TV










The new widgetry features multi-cluster suppo...






















