- From: Kasi, Jay <jay.kasi@commerceone.com>
- Date: Fri, 18 May 2001 13:29:48 -0700
- To: "'xml-dist-app@w3.org'" <xml-dist-app@w3.org>
Hi. XML Protocol requirements document does include use cases that cover multihop, request/response, RPC, asynchronous messages, and multiple responses so this note is relavent. One thing that is missing in SOAP (and SOAP derivatives like SOAP with attachments, BIZTALK, ebXML, etc) is proper support (atleast in my opinion) for sync/async BEHAVIOR (request/response). SOAP says: "Processing a message or a part of a message requires that the SOAP processor understands, among other things, the exchange pattern being used (one way, request/response, multicast, etc.), the role of the recipient in that pattern, the employment (if any) of RPC mechanisms such as the one documented in <http://www.w3.org/TR/SOAP/#_Toc478383532> section 7, the representation or encoding of data, as well as other semantics necessary for correct processing." So request/response behavior indication is not defined in SOAP headers. XML Protocol has not defined what request/response and asynchronous messaging means (as far as I can see). Let me try out some definitions as straw map ideas. I dont know what the industry accepted definitions are. A sync behavior (request) is basically defined by the sender and understood by the receiver. The sender app thread that want the sync behavior sends a message and blocks for a response (or error) with possible timeout. A receiver app thread implements a sync behavior by responding (typically immediately) in the thread that received the request. In an async behavior the sending thread does not wait for a response. One or more response may be received later and processed by a different thread. The receiving thread does not need to respond in that thread. A sync transport allows a response to be optionally sent back in the same transport session. An async transport does not allow this. The response has to be sent back in a seperate transport session possibly many days later. There is confusion between sync/async transports and sync/async behaviors (called request/response). These two are completely independent, although a protocol may define a transport binding that maps the behavior to the transport. You CAN implement a sync behavior on top of an async transport (like a MOM or SMTP) or a sync transport (like HTTP). Conversely you CAN implement a async behavior on top of a sync transport or an async transport. Also you can use different types of transports over different hops and still preserve the sync or async behavior. Also the request may use one transport type and the response may use another transport type vre a hop. However there are problems for the various threads everywhere in determining if they should block for a reply. Also the end point has difficulty in determining the behavior to implement. 1. There is not a defined way for a sender to notify a receiver that the sync behavior is required. The receiver has to know out of band that this request type is a sync request. I dont see why this should be the case. I also dont see why the same request type cannot be requested with sync or async behavior. 2. When a sync request is mapped to a sync transport into an intermediate (or endpoint) node over a hop, the recv thread in that node has to know to block for the response (for both sync or async transport out of this node over the next hop). It can only know this if there was some indication in the header that this is a sync request. If the outgoing transport is async, the response has to have an indication that this is a syncreply so the blocked thread can pick it up (message matching done through some correlation fields in headers). The blocked thread might have timed out in which case the indication that this is a sync reply is a clue that the message has to be discarded.
Received on Friday, 18 May 2001 16:30:20 UTC