- From: David Hull <dmh@tibco.com>
- Date: Thu, 07 Apr 2005 16:43:31 -0400
- To: public-ws-async-tf@w3.org
- Message-id: <42559B73.4010404@tibco.com>
After considerable thought, I believe that the rules below will cover both synchronous and asynchronous forms of the existing WSDL MEPs and will extend smoothly to cover a number of generally similar interactions not currently described by WSDL, using existing SOAP extensibility to cover endpoint MAPs other than those defined in the core, and keeping the current form of the endpoint MAPs currently defined in the core. They are not quite those currently given in the core, but they are similar, and are compatible with them in a sense described below. The guiding principle here is that the party advertising a service gives the terms of the contract and the party using the service may follow that contract however it sees fit. The descriptions below thus describe what the service will do given the possible values (or lack of values) of the various MAPs. This is exactly the information that the client needs in order to ensure interoperation with the service. We do not directly specify the behavior of the client. For example, there is no general statement that [message Id] is required if [reply endpoint] is present. Instead, there are a number of ways to comply with the contract given, ranging from existing SOAP/HTTP behavior to full use of the MAPs defined in the core. A final point: In all interactions (even fire-and-forget in-only) there is always the possibility of a transport fault. In an HTTP binding, this would include things like a 404 response as well as more basic failures like an unknown host name. It would of course /not/ include an application-level fault reply. A transport fault will generally refer to detailed information that will not be intelligible at this level (beyond knowing that something went wrong with the transport), but will presumably be intelligible to other layers. Request/Reply * All MAPs other than [destination] and [action] are OPTIONAL. * If the request message defines a [message Id], the outbound message's [relationship] MUST contain the pair (/in-reply //IRI//, ID)/, where ID is the [message Id] of the request. * If the outbound message is a reply and [reply endpoint] is defined, the outbound message MUST be sent to the [reply endpoint]. * If the outbound message is a fault and [fault endpoint] is defined, the outbound message MUST be sent to the [fault endpoint] * Otherwise, if a [source endpoint] is defined, the outbound message MUST be sent to the [source endpoint] (see note 1) * Otherwise, if the binding defines a default means of delivering outbound messages, the outbound message MUST be sent by that means. * Otherwise, the message has been constructed inappropriately for the binding. It will not generally be possible to signal this at message delivery time, but there will have been enough information in the WSDL binding to detect the situation prior to message delivery time. Note 1: This rule is not strictly necessary, but it accords with the existing practice in email of defaulting reply-to: to from: and IMHO, allows for smoother extensibility to other patterns. The overall approach will still work if this rule is omitted, or replaced (or augmented) by the rule defaulting [fault endpoint] to the [reply endpoint] (if any). This formulation covers existing request/reply as a special case (assuming that the receiver can always extract an [action]), and it allows the client to include only the MAPs it needs. There's no need to construct a message ID if correlation is handled by other means, and no need to give a reply address if it's provided by the transport. A service following these rules will also be compatible with a client following the stricter rules described in the core. In such a case, the client will always include a [reply endpoint] (since a reply is expected) and will always include a [message Id] (since the rules require it if [reply endpoint] is present). The service will then be able to include the appropriate entry in the [relationship] property. As the existing rules on formulating a reply are unconstrained if [fault endpoint] is missing, the behavior described above is also compatible with them. Robust in-only This is the same as request/reply, but without the rule for [reply endpoint]. * All MAPs other than [destination] and [action] are OPTIONAL. * If the request message defines a [message Id], the outbound message [relationship] MUST contain the pair (/in-reply //IRI//, ID)/, where ID is the [message Id] of the request. * If the outbound message is a fault and [fault endpoint] is defined, the outbound message MUST be sent to the [fault endpoint] * Otherwise, if a [source endpoint] is defined, the outbound message MUST be sent to the [source endpoint] (see note 1) * Otherwise, if the binding defines a default means of delivering outbound messages, the outbound message MUST be sent by that means. * Otherwise, the message has been constructed inappropriately for the binding. It will not generally be possible to signal this at message delivery time, but there will have been enough information in the WSDL binding to detect the situation prior to message delivery time. In-only (fire and forget) * All MAPs other than [destination] and [action] are OPTIONAL. * And that's it. Other patterns (e.g., request/reply/alternate, initial/normal/urgent etc.) The service advertising such a service can set any contract it likes and define whatever properties it likes. However, the pattern given above would provide a useful starting point, with modifications shown in bold: * All MAPs other than [destination] and [action] are OPTIONAL. * If the request message defines a [message Id], the outbound message [relationship] MUST contain the pair (/*relation IRI*, ID)/, where *relation IRI indicates the type of outbound message and *ID is the [message Id] of the request. * *Put rules for specific outbound endpoints here* * Otherwise, if a [source endpoint] is defined, the outbound message MUST be sent to the [source endpoint] (see note 1) * Otherwise, if the binding defines a default means of delivering outbound messages, the outbound message MUST be sent by that means. * Otherwise, the message has been constructed inappropriately for the binding. It will not generally be possible to signal this at message delivery time, but there will have been enough information in the WSDL binding to detect the situation prior to message delivery time.
Received on Thursday, 7 April 2005 20:43:36 UTC