- 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