RE: An Example Use of RM's MakeConnection

I wonder what the rationale was for deciding that MakeConnection was
one-way? It seems to me that it should be Request-Response, so that it
can either receive the pending response, or a message saying "message
still pending" (something I saw on another e-mail).
 
I note with interest that you say that the To in the HTTP response to
MakeConnection is the replyTo from the original request - that seems a
little odd (to my uneducated eyes). I would have expected it to be the
replayTo from the MakeConnection (yes, I know that MC doesn't have a
replyTo, but see above ponderings)
 
If nothing else, I hope these discussions are providing material for the
Primer/FAQ for RM :-)
 
Tony Rogers
tony.rogers@ca.com <blocked::mailto:tony.rogers@ca.com> 
 

________________________________

From: public-ws-addressing-request@w3.org
[mailto:public-ws-addressing-request@w3.org] On Behalf Of Doug Davis
Sent: Monday, 9 October 2006 11:08
To: public-ws-addressing@w3.org
Subject: 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 04:41:10 UTC