- From: David Hull <dmh@tibco.com>
- Date: Tue, 24 Jan 2006 00:39:32 -0500
- To: "xml-dist-app@w3.org" <xml-dist-app@w3.org>
- Message-id: <43D5BD94.2020709@tibco.com>
My understanding of SOAP features and properties is that they exist to abstract, um, features and properties of underlying protocols so that other functionality can be built on them in a protocol-independent manner. In the ongoing efforts to map messaging behavior onto underlying protocols, we have had basically 1 (one) feature to build on: the request-response MEP. (I'm not counting [action] because it's basically orthogonal to the problem at hand.) Put that way, it seems as though it could be useful to expand the toolbox a bit. Here is a sketch, followed by a note on how to connect this to WSA and messaging. In the running NOTEs, I sketch how these properties might be defined for email, XMPP, HTTP and BEEP. Each protocol has its own unique considerations, but each property is meaningful for at least two protocols. This suggests (to me at least) that these are useful abstractions. * OPTIONAL Feature: Addressing-related facilities. This feature defines several useful properties of SOAP messages. o OPTIONAL Property: [destination address]. This is defined when there is a dereferenceable URI available designating the destination of the message. /NOTE: "Dereferenceable" here means basically that one could send another message to the same destination without additional context. For example, the to: header of an email, the <to/> element of an XMPP message, the URI of an HTTP request. By contrast, an HTTP response message or BEEP message would not have a well-defined [destination address]. In those cases the HTTP and BEEP connections respectively provide the extra context./ o OPTIONAL property: [return address]. This is defined when there is a dereferenceable URI available by which a message can be sent in reply to the message. /NOTE: For example, the reply-to: of an email, or from: if none is present, or the from attribute of an XMPP message. This property is undefined for an HTTP request or response, or for a BEEP message. NOTE: The [return address] may or may not be the sender of the message being replied to. / o OPTIONAL property: [message id]. This is defined when there is a string available uniquely identifying the message within some context defined by the binding./ NOTE: For example, the message-id: header of an email or id attribute of an XMPP <message/> or an <iq/> with type=get or set. This property would not be defined for an XMPP <iq/> of type=result, or an HTTP message, but can be defined for a BEEP message. In the last case, the binding would (IIUC) stipulate that [message id] is unique to a given connection./ o OPTIONAL property: [in reply to]. This is defined when there is a string available uniquely identifying a message that the message in question is in reply to. /NOTE: This property will typically be set by application logic on the sending (i.e., server) side. For example, the in-reply-to: header in email, the id attribute of an <iq> with type=result. With XMPP <message/>, it appears you would need further information to figure out whether id is [message id] or [in reply to] (e.g., look for a special [action], or look up the id in the set of requests you've sent. In the normal case, you have to do that anyway, but in the error case you usually wouldn't). The property would be undefined for HTTP but can be defined for BEEP./ * OPTIONAL feature: Correlation of response messages. This feature is available if the binding supplies a means by which the receiver of a message may determine that it is in response to a particular previous message and if so, identify that previous message. It is automatically available via the request-response MEP when the binding provides that MEP. It is also automatically available when [return address] and [message id] are available for the request and [in reply to] is available for the response. It may also be made available through other binding-specific means. /NOTE e.g., BEEP effectively makes [return address] implicit, but supports explicit [message id] and [in reply to]./ * OPTIONAL feature (maybe): Guarantee of response: This feature is available if a request message is guaranteed to produce, unambiguously, an acknowledgment of receipt, a response (whether reply or fault) or a failure. This feature is provided automatically by the request-response MEP. /NOTE: It's not clear whether this would ever be available where the request-response MEP is not available. Even if it isn't, it might be worth calling out the feature separately. Or not. The point here is that not every protocol provides this. HTTP and XMPP <iq/> do, XMPP <message/> email and BEEP (IIUC) don't without further machinery./ I believe a formulation like the above considerably clarifies the semantics of WSA MAPs as bound to SOAP. In particular: * A sender may sensibly use an anonymous response endpoint ([reply endpoint] or [fault endpoint]) if the [return address] property is available or the request-response MEP is available. * An anonymous [destination] makes sense if the binding provides the [destination address] property. * The [message id] MAP is superfluous (but still REQUIRED) in various cases when the SOAP [message id] property is available. (It's also superfluous in other cases, but that's a different discussion). Interestingly, this view of the anonymous address is very close to the original "the binding will know what to do" definition. The main difference is that we have sharpened just /what/ the binding is expected to provide in what situation (i.e., response or destination). Knowing whether the features and properties above (and request-response) are available allows a sender to know what options are meaningfully available. For example, if the request-response MEP is available, I can be sure that a request will produce either a response, a failure or an acknowledgment. In other cases, I may not know this, but if correlation of responses is available, I know that I can at least correlate any responses that do arrive. If none of this is available end-to-end, I know that I will need to build what I want using WSA and some sort of failure detection.
Received on Tuesday, 24 January 2006 05:39:35 UTC