- From: Doug Davis <dug@us.ibm.com>
- Date: Sun, 8 Oct 2006 21:07:33 -0400
- To: public-ws-addressing@w3.org
- Message-ID: <OF5460E95C.21DD59CB-ON85257201.008008FF-85257202.00062ED3@us.ibm.com>
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