An Example Use of RM's MakeConnection

Bob asked me to send a set of example flows using MakeConnection in the 
hopes of helping people's understanding of its usage model. Below is a 
very simple request-response message flow. The WS-RM spec also has an 
example message flow that shows how the RM anon URI template can be used 
in a more interesting pattern - a notification scenario - sort of like a 
one-in/many-out scenario (see section C.6 in 
http://docs.oasis-open.org/ws-rx/wsrm/200608/wsrm-1.1-spec-cd-04.pdf ).

Scenario: Client sends GetQuote to server unreliably.  Server wants to 
send GetQuoteResponse using RM so it must sent a CreateSequence before I 
can send the GetQuoteResponse back.

Step 1 - Client sends GetQuote to Server
<soap:Envelope ...>
 <soap:Header>
  <wsa:To> http://stockquote.com </wsa:To>
  <wsa:Action> foo:GetQuote </wsa:Action>
  <wsa:MessageID> uuid://.../100 </wsa:MessageID>
  <wsa:ReplyTo> 
   <wsa:Address> http://...wsrm/anonymous?id=...1 </wsa:Address>
  </wsa:ReplyTo>
 </soap:Header>
 <soap:Body>
  <foo:GetQuote> IBM </foo:GetQuote>
 </soap:Body>
</soap:Envelope>

Notice the wsa:ReplyTo uses the RM anon URI template.  If the Server 
didn't need to use RM then it could just use the transport backchannel to 
send the GetQuoteResponse if it wanted (but that would be boring :-)

Step 2 - Server sends an RM CreateSequence to the Client using the only 
means it has available - the transport backchannel.
<soap:Envelope ...>
 <soap:Header>
  <wsa:To> http://...wsrm/anonymous?id=...1 </wsa:To>
  <wsa:Action> http://...wsrm/CreateSequence </wsa:Action>
  <wsa:MessageID> uuid://.../101 </wsa:MessageID>
  <wsa:ReplyTo> 
   <wsa:Address> http://stockquote.com </wsa:Address>
  </wsa:ReplyTo>
 </soap:Header>
 <soap:Body>
  <wsrm:CreateSequence> ... </wsrm:CreateSequence>
 </soap:Body>
</soap:Envelope>

Step 3 - Client sends a CreateSequenceResponse to wsa:ReplyTo
<soap:Envelope ...>
 <soap:Header>
  <wsa:To> http://stockquote.com </wsa:To>
  <wsa:Action> http://...wsrm/CreateSequenceResponse </wsa:Action>
  <wsa:RelatesTo> uuid://.../101 </wsa:RelatesTo>
 </soap:Header>
 <soap:Body>
  <wsrm:CreateSequenceResponse> ... </wsrm:CreateSequenceResponse>
 </soap:Body>
</soap:Envelope>

Step 4 - Having not received the GetQuoteResponse, the Client uses 
MakeConnection to allow it to flow back
<soap:Envelope ...>
 <soap:Header>
  <wsa:To> http://stockquote.com </wsa:To>
  <wsa:Action> http://...wsrm/MakeConnection </wsa:Action>
 </soap:Header>
 <soap:Body>
  <wsrm:MakeConnection>
   <wsrm:Address> http://...wsrm/anonymous?id=...1 </wsrm:Address>
  </wsrm:MakeConnection>
 </soap:Body>
</soap:Envelope>

Notice: no wsa:ReplyTo since its a one-way

Step 5 - Server uses this backchannel to let the GetQuoteResponse flow 
back to the Client
<soap:Envelope ...>
 <soap:Header>
  <wsa:To> http://...wsrm/anonymous?id=...1 </wsa:To>
  <wsa:Action> foo://GetQuoteResponse </wsa:Action>
  <wsa:RelatesTo> uuid://.../100 </wsa:RelatesTo>
  <wsrm:Sequence> ... </wsrm:Sequence>
 </soap:Header>
 <soap:Body>
  <foo:GetQuoteResponse> 139.0 </foo:GetQuoteResponse>
 </soap:Body>
</soap:Envelope>

Notice the wsa:RelatesTo points to the GetQuote request message and it is 
sent using RM (the Sequence header), and that the SOAP Envelope looks 
exactly like it would if it had been sent on the original transport 
backchannel - meaning, the wsa:To is derived from the wsa:ReplyTo from the 
GetQuote request message not the MakeConnection. 

HTH.  BTW, I will try to join the WSA call tomorrow but I have a conflict 
from 4-5 eastern, so if there are any questions on this example I should 
be able to answer them at 5.

thanks
-Doug

Received on Monday, 9 October 2006 01:07:57 UTC