Logo WHITE MESA SOFTWARE
Home   Download   Links   Documentation
 

White Mesa SOAP Server: Web Services Routing Protocol Implementation

The Web Services Routing Protocol offers a means to control the message path along which a SOAP method passes as it moves from sender to receiver, perhaps through one or more intermediaries. It is implemented as a SOAP extension, embodied in a SOAP Header entry.

This is an experimental implementation!

The WS-Routing implementation consists of a Header processing component, and a WSDL document containing the demonstration service definition, and a simple browser based test client.

The header processor handling the WS-Routing header relies upon the ability of the White Mesa server to act as an intermediary. This is described in more detail here. The server's header processing mechanism is discussed here , including the topic of WSDL syntax for describing SOAP header entries.

A public WS-Routing intermediary node exists for demonstration purposes at http://www.whitemesa.net/interop/wsrouter. A browser based test client is available to exercise the service. The client requires IE 5.0 or higher to run. The wire dumps are displayed so that the WS-Routing header entry can be examined in detail.

Also:

  • The implementation supports only HTTP.
  • Only a subset of the WS-Routing Fault messages are implemented:
    • 700 "Invalid WS-Routing Header"
    • 701 "WS-Routing Header Required"
    • 710 "Endpoint Not Found"
    • 712 "Endpoint Not Supported"
    • 800 "Unknown WS-Routing Fault"
  • Message Id's generated are UUIDs.
  • If a node is serving as an endpoint, the value of the "from" element is retrieved from the registry.
  • When an explicit reverse path is used to direct the SOAP response message along a message path other than that used for the SOAP request message, an HTTP 204 "No Content" response is returned from the ultimate receiver node.
 

Configuration

Setting up the WS-Routing handler for a SOAP service requires:

  • Configuring the SOAP service to use the WS-Routing component as a Header processor. This requires adding the ProgID of the Server ("Wmsoapsvc.wmwsrouter") to the list of Header processors for the SOAP service. This step can be accomplished by using the White Mesa SOAP Server Control Panel or by modifying the configuration file, as detailed here.
  • Providing the supporting Header message definitions and binding information in the WSDL document used to define the service. The demonstration service WSDL document provides an example of these necessary elements.
  • Configuring the WS-Routing handler with the URI associated with the service when it is acting as the "ultimate destination" or endpoint node. This involves modifying a registry entry, using "regedit.exe". This entry is a string value named "FromURI" found under the "HKEY_LOCAL_MACHINE\SOFTWARE\White Mesa Software\White Mesa WS-RP\1.0" key. This value should be set to reflect the identity of the endpoint and is used to populate the "from" field in WS-Routing header entries. A URI of the form "mailto:endpointname@example.org" is one possibility.

Example

Here is an example "echoString()" call from the client to endpoint "delta.whitemesa.net" via intermediary "www.whitemesa.net":

[Request from client to intermediary]

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
   xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
   xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SOAP-ENV:Header>
      <h:path xmlns:h="http://schemas.xmlsoap.org/rp/" 
      SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" 
	  SOAP-ENV:mustUnderstand="1">
         <rp:action xmlns:rp="http://schemas.xmlsoap.org/rp/">
		 http://soapinterop.org/
	 </rp:action>
         <rp:to xmlns:rp="http://schemas.xmlsoap.org/rp/">
		 http://delta.whitemesa.net/multihop
	 </rp:to>
         <rp:fwd xmlns:rp="http://schemas.xmlsoap.org/rp/">
            <rp:via>http://www.whitemesa.net/interop/std/multihop</rp:via>
         </rp:fwd>
         <rp:rev xmlns:rp="http://schemas.xmlsoap.org/rp/">
            <rp:via/>
         </rp:rev>
         <rp:from xmlns:rp="http://schemas.xmlsoap.org/rp/">
		 testclient@whitemesa.net
	 </rp:from>
         <rp:id xmlns:rp="http://schemas.xmlsoap.org/rp/">
		 uuid:EC823E93-BE2B-F9DC-8BB7-CD54B16C6EC1
	 </rp:id>
      </h:path>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <m:echoString xmlns:m="http://soapinterop.org/" 
         SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">>
         <inputString>Hello World!</inputString>
      </m:echoString>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>		

[Request from intermediary to endpoint]

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <rp:path SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" 
         SOAP-ENV:mustUnderstand="1" 
		 xmlns:rp="http://schemas.xmlsoap.org/rp/">
         <rp:action>http://soapinterop.org/</rp:action>
         <rp:to>http://delta.whitemesa.net/multihop</rp:to>
         <rp:fwd />
         <rp:rev>>
            <rp:via />
            <rp:via />
         </rp:rev>
         <rp:from>testclient@whitemesa.net</rp:from>
         <rp:id>uuid:EC823E93-BE2B-F9DC-8BB7-CD54B16C6EC1</rp:id>
      </rp:path>
   </SOAP-ENV:Header>>
   <SOAP-ENV:Body>
      <m:echoString xmlns:m="http://soapinterop.org/" 
         SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <inputString>Hello World!</inputString>>
      </m:echoString>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[Response from endpoint to intermediary]

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <rp:path SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" 
         SOAP-ENV:mustUnderstand="1" 
		 xmlns:rp="http://schemas.xmlsoap.org/rp/">
         <rp:action>http://soapinterop.org/</rp:action>
         <rp:fwd>
            <rp:via />
            <rp:via />
         </rp:fwd>
         <rp:rev>
            <rp:via>http://delta.whitemesa.net/multihop</rp:via>
         </rp:rev>
         <rp:from>mailto:delta@whitemesa.net</rp:from>
         <rp:id>uuid:A482E1E9-EAA7-4965-84F9-39DB739C1129</rp:id>>
         <rp:relatesTo>uuid:EC823E93-BE2B-F9DC-8BB7-CD54B16C6EC1</rp:relatesTo>
      </rp:path>
   </SOAP-ENV:Header>
   <SOAP-ENV:Body>
      <m:echoStringResponse xmlns:m="http://soapinterop.org/" 
         SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <return>Hello World!</return>
      </m:echoStringResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

[Response from intermediary to client]

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header>
      <rp:path SOAP-ENV:actor="http://schemas.xmlsoap.org/soap/actor/next" 
         SOAP-ENV:mustUnderstand="1" xmlns:rp="http://schemas.xmlsoap.org/rp/">
         <rp:action>http://soapinterop.org/</rp:action>
         <rp:fwd>
            <rp:via />
         </rp:fwd>
         <rp:rev>
            <rp:via>http://www.whitemesa.net/interop/std/multihop</rp:via>
            <rp:via>http://delta.whitemesa.net/multihop</rp:via>
         </rp:rev>
         <rp:from>mailto:delta@whitemesa.net</rp:from>
         <rp:id>uuid:A482E1E9-EAA7-4965-84F9-39DB739C1129</rp:id>
         <rp:relatesTo>uuid:EC823E93-BE2B-F9DC-8BB7-CD54B16C6EC1</rp:relatesTo>
      </rp:path>
   </SOAP-ENV:Header>>
   <SOAP-ENV:Body>
      <m:echoStringResponse xmlns:m="http://soapinterop.org/" 
         SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <return>Hello World!</return>
      </m:echoStringResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Home   Download   Links   Documentation

Copyright 2003 by Robert Cunnings.   cunnings@whitemesa.com  Last modified: Feb 2, 2003