- From: David Hull <dmh@tibco.com>
- Date: Fri, 08 Apr 2005 12:14:26 -0400
- To: public-ws-async-tf@w3.org
- Message-id: <4256ADE2.8070704@tibco.com>
Following on to the previous proposal for WSDL MEPs, here is what I think we will need at the SOAP layer to make everything play together. This may also help clarify a couple of phrases in the previous proposal, namely " if the binding defines a default means of delivering outbound messages" and "there will have been enough information in the WSDL binding to detect the situation". Again, this is largely a synthesis of ideas we've already discussed. For me, the key point is that it looks like we really have identified all the pieces we need, and they can be made to fit together. For the sake of concreteness and since most of the discussion has revolved around in-[out], I'll cast what follows in terms of three MEPs (in-only, in-[out] and the existing request-reply), but the same general approach would work with a single configurable "über MEP". This approach is built around a fairly simple case analysis. One of these cases will always hold: * The sender doesn't care what comes back directly to it. * The sender expects a return message under some circumstances, and needs to know either that such a message arrived or definitely won't arrive. * The sender expects a return message under all circumstances. In all cases, even the first, there may be transport faults. These three cases obviously correspond to in-only, in-[out] and request-reply respectively. The first case is valid on /any/ messaging protocol. The last two apply only when the messaging protocol is capable of sending return messages to the sender without the assistance of a [reply endpoint] MAP or similar device. HTTP can support all three cases. An email binding might or might not support all three depending on how it's defined. A pure pub/sub protocol could only support the first. In all cases, the binding definition will say what MEPs are supported, so a potential client can know ahead of time whether in-[out] and request-reply are available. The obligations for the transport layer follow directly from these cases * In in-only, the transport is obligated only to send the message (or report a transport fault). * In in-[out], the transport is obligated to send the message and report whether a return message was sent (or report a transport fault) * In request-reply, the transport is obligated to send the message and deliver a return message (or report a transport fault). Here is how the WSDL MEPs and related variations layer on top of the three SOAP MEPs: Request/Reply * If both [reply endpoint] and [fault endpoint] are defined (note 1), use in-only. * Else if the binding in use only supports in-only, then [reply endpoint] and [fault endpoint] MUST be defined. You just can't do request/reply over a fire-and-forget transport without saying where you want replies and faults to go. * Else if the binding in use supports in-[out] and request-reply, then o If exactly one of the two is defined (note 1, note 2), use in-[out]. o If none is defined, use request-reply. Note 1: I'm assuming no anonymous endpoints here. If we allow these, then an anonymous reply or fault endpoint has the same effect as if the property were undefined. Note 2: The "[fault endpoint] defaults to [reply endpoint] if possible" rule can apply here if we want. I left it out as it complicates the text but doesn't really change the picture. Robust In-Only As before, this is just a reduced form of the request/reply case * If [fault endpoint] is defined (note 1), use in-only. * Else if the binding in use only supports in-only, then [fault endpoint] MUST be defined. You just can't do robust in-only over a fire-and-forget transport without saying where you want faults to go. * Else if the binding in use supports request-reply and [fault endpoint] is not defined, use request-reply. In-only * Use in-only * And that's it Other patterns (e.g., request/reply/alternate, initial/normal/urgent etc.) Again, the service advertising such a service can set any contract it likes and define whatever properties it likes. However, the rules given above extend smoothly to other patterns, with the modifications shown in bold, because the SOAP MEPs themselves don't look at the [* endpoint] properties. Note that the previous rules fall out as special cases (including in-only, since the first condition is vacuously true). : * If *all possible endpoints for further messages* are defined (note 1), use in-only. * Else if the binding in use only supports in-only, then* all possible endpoints for further messages* MUST be defined. You just can't do *such an interaction *over a fire-and-forget transport without saying where you want *further messages* to go. * Else if the binding in use supports in-[out] and request-reply, then o If *some but not all possible endpoints for further messages are defined *(note 1, *note 2 does not apply*), use in-[out]. o If none is defined, use request-reply.
Received on Friday, 8 April 2005 16:14:29 UTC