- From: David Hull <dmh@tibco.com>
- Date: Fri, 27 Jan 2006 11:18:44 -0500
- To: noah_mendelsohn@us.ibm.com
- Cc: David Orchard <dorchard@bea.com>, Mark Baker <distobj@acm.org>, "Patrick R. McManus" <mcmanus@datapower.com>, Rich Salz <rsalz@datapower.com>, xml-dist-app@w3.org
- Message-id: <43DA47E4.1020207@tibco.com>
noah_mendelsohn@us.ibm.com wrote:
>David Orchard writes:
>
>
>
>>More to the point, I don't see why we'd need an request-optional-
>>soap-response mep AND a f-a-f mep where f-a-f is interpreted as you
>>suggested on the server.
>>
>>
>
>...because when we implement SOAP on true FAF transports like UDP, and
>maybe some flavors of Jabber (I have to go back and look at that) we'll
>want the true FAF MEP and probably not the Req/Resp (I.e. because
>Req/Resp, as we keep reminding ourselves, requires the transport to know
>how to address responses, which in general UDP does not provide.)
>
As I've argued, I believe that the request-response MEP provides two
interesting features: correlation and transactionality. Further, these
are independent. You can have a transactional one-way flow (you know
that either the message arrived or something bad happened), and you can
have non-transactional request-response (a.k.a. two correlated
one-ways). HTTP provides both, and the request-response MEP promises
both. Even with an optional response, it promises transactionality, and
promises correlation if there is a response. By contrast, F&F would be
aimed at non-transactional one-way flow.
In summary:
* If you just need to send a message on a best-effort basis, use F&F
* If you need to send a message and know that it arrived, as we now
have it framed, you would use request-optional-response but
arrange that there would not be a response.
* If you need to do a request-response on a best-effort basis, use
two correlated one-ways. I've suggested using the [return
address] feature here to cover the various protocols that provide
a return address but no transactionality
* If you need to do a request-response and know that it worked, use
the request-response MEP.
Unfortunately, the last will only work if you can do everything in one
operation of the underlying protocol, i.e. a single HTTP operation.
Even in the case of "asynchronous request-response" over HTTP, you've
lost the transactionality. In this case, HTTP is little different from
everything else. You can tell the request arrived, but if you never
receive a response, you don't know why, or even that there is an error.
The server might just be slow. You can set a timeout, retry etc., but
this all has to be above the SOAP level.
I'm also concerned about protocols like XMPP <message/>, which provide a
one-way transactional operation. That is, IIUC, you can tell whether
your <message/> arrived or not even if you're not expecting a response.
If we model this as F&F, we've lost that information. If we model it as
r-o-r, we're implying that <message/> can provide transactional
request/response. It can't. It can do the correlation, but it can't
promise transactionality. It might be possible to finesse this
particular case by using <iq/> if a response is expected and <message/>
if not, but then the binding would have to figure out whether a response
is expected. I think Rich has argued convincingly against this.
//
> FAF is
>the natural MEP and should be used on one-way transports; Req/Resp and/or
>Response-only (which is more properly named
>Request/ResponseWithEnvelopeInResponseOnly) are the natural MEPs and
>should be used on Request/Response protocols like HTTP.
>
>--------------------------------------
>Noah Mendelsohn
>IBM Corporation
>One Rogers Street
>Cambridge, MA 02142
>1-617-693-4036
>--------------------------------------
>
>
>
>
>
>
>
>
Received on Friday, 27 January 2006 16:19:42 UTC