- From: David Hull <dmh@tibco.com>
- Date: Tue, 10 May 2005 16:17:08 -0400
- To: public-ws-addressing-comments@w3.org
- Message-id: <428116C4.7090407@tibco.com>
Currently the [message id] property is required whenever [reply endpoint] or [fault endpoint] is present. While correlating messages via [message id] is useful, it is not necessary in several plausible cases: * Correlation is handled at the transport level. In such a case a sender may still wish to include a [reply endpoint] with an anonymous address, in order to ensure that a particular reference parameter appears in the reply, but there is no need for a message id per se. * Correlation context is provided at the SOAP level by other means, for example via a header containing a context or transaction ID. In such a case, the receiver of a reply may already be tracking which messages arrive with which [action] properties in a particular context, and have no need to look at a message id. * Correlation is handled at the application level. The body of a request may contain a transaction id or other correlating token, with this token echoed in the response, or the application semantics may otherwise make message ids unnecessary. * Correlation doesn't matter because there is no meaningful reply. This basically means a "void" operation with no application-level faults defined. * Correlation doesn't matter for other reasons. For example, if several requesters send requests, all of which are directed to the same [reply endpoint], whose job is simply to accumulate some aspect of the messages received without regard to what produced them. The server has no need to know it is being used in this way, and there is no reason to require message ids. In general, the receiver or a request has no way of knowing how the sender may or may not be correlating replies, and has no reason to care. Even if an identifying token is needed for message correlation, there is no need to define a [message id] property. The [reply endpoint] may contain any identifying token at all, for example <me:myRelationship type="me:InReplyTo">0xdeadbeef</me:myRelationship>. By the existing rules, this will be echoed into any replies sent to the reply endpoint. Indeed, this is one way of handling correlation by context or transaction id as well. The main value added by the [message id] property is that there is no need to duplicate this information in the [fault endpoint], in the case where both [reply endpoint] and [fault endpoint] are defined. This is potentially useful, but clearly not essential. Making [message id] mandatory has at least these moderate but definite drawbacks: * In cases where correlation is already being done by other means, carrying a redundant [message id] provides needless opportunity for error and confusion. * Producing a globally unique id for each message takes time, which may matter in high-volume or resource-constrained environments. * Similarly, requiring recipients to needlessly check for [message id] and echo it back also takes time. * In practice, client implementations are liable to produce non-unique IDs on the assumption that it doesn't matter anyway. This misbehavior is generally not worth detecting, as it would require servers to remember IDs of incoming messages, but if undetected it can lead to mysterious behavior if that assumption becomes false, as correlating by a non-unique ID may well work by accident, most of the time. In general, the receiver of a message should be liberal in what it accepts and not go out of its way to prohibit behavior that may be useful to the rest of the system. Requiring [message id] without being able to know whether or not it is actually needed runs counter to this principle.
Received on Tuesday, 10 May 2005 20:17:18 UTC