- From: David Hull <dmh@tibco.com>
- Date: Tue, 04 Apr 2006 15:01:10 -0400
- To: Todd Wolff <twolff@bluestemsoftware.com>
- Cc: Jonathan Marsh <jmarsh@microsoft.com>, public-ws-addressing-comments@w3.org
- Message-id: <4432C276.3010405@tibco.com>
Comments inline. Todd Wolff wrote: >Jonathan, > >So that we can better understand one another, I assume 'programming model' >implies the mechanics by which message exchanges are handled within the >'application layer.' If this is the case, then I understand >that the value of the 'anonymous' element, which is a binding artifact, >cannot be used, as it is currently designed, to indicate the programming >model employed, i.e. sync or async. This, I believe, is exactly the >problem. > >Allow me to explain. Lets assume that only a single binding is provided for >a service, i.e. a soap/http binding and the binding binds an interface with >a single 'In-Out' operation named 'echo'. If the value of the anonymous >element defined on the binding is 'optional', how/where is the decision made >to insert an anonymous URI vs. a non-anonymous URI into the wsa:ReplyTo >header of a request sent to this operation? > >It would appear to me, that this decision should be made within the >application layer. The only way that this would be possible is if: > >1. The 'optional' value were removed from the spec, or >2. The 'anonymous' element were removed and a new binding type created, >i.e. 'soap/http non-anon.' > >Either solution would allow the WSDL author to create two soap/http >bindings. One that requires that all requests sent to the 'echo' operation >contain an anonymous ReplyTo URI and one that prohibits all requests sent to >the 'echo' operation from using an anonymous ReplyTo URI. The decision then >COULD be made within the application layer via endpoint assignment, i.e. by >selecting either the SoapHttpAnon endpoint or by selecting the >SoapHttpNonAnon endpoint. > > If you want to define an endpoint that requires anonymous (i.e., doesn't support "async" responses), use wsaw:Anonymous="required". If you want to define an endpoint that prohibits anonymous (i.e. /only/ supports "async" responses), use wsaw:Anonymous="prohibited". Otherwise, by default or by explicitly using wsaw:Anonymous="optional" the WSDL advertises that the endpoint will accept either form. The existing SOAP 1.1/HTTP binding, together with the very brief note describing the use of status 202, supports this as-is. XMLP is currently hammering out the analogous case for SOAP 1.2, but the results for HTTP will be essentially the same. For example, with wsaw:Anonymous="optional" * If the request has wsa:ReplyTo anonymous, the reply will come back as usual with a 200 status. Similarly, if wsa:FaultTo is anonymous (or missing and ReplyTo is), a fault will come back as usual with a 5xx (or was it 4xx?) status. * If the request has wsaw:ReplyTo non-anonymous, the HTTP response will have a 202 response code. The sender then knows to expect a response elsewhere. More precisely, the sender will /already/ know what to expect unless it included an anonymous wsaw:ReplyTo and a non-anonymous wsaw:FaultTo or vice-versa. In this "split" case, the response code will disambiguate. In the more common case, it will confirm what the sender already knows and distinguish replies from faults as usual. Knowing this, the sender can use anonymous endpoints or not as it sees fit, according to its own circumstances. In general, the WSDL describes what the receiver will accept and what it will do in response to a message, in terms of the facilities defined in the core and the SOAP binding (or whatever other binding is relevant). The sender may do with that information what it likes. In the case of anonymous optional, the receiver is saying "[from the WSDL binding] You may send me messages with any mix of anonymous and non-anonymous response endpoints. [from the core and SOAP binding] If I use an anonymous endpoint for a fault or response, that fault or response will be sent via the HTTP response. Otherwise, it will be sent according to the relevant binding." If the sender wants to receive responses via the HTTP response, it should use anonymous. If not, it should use something else. There is no way for the receiver's WSDL to signal what the sender should do. This is completely up to the sender. This is really no different from the case with "none", except that none is always available and so doesn't need to be mentioned in the WSDL at all. The receiver MUST support none (as per the Core). The sender can use it or not as it sees fit. Hope this helps. >Perhaps a non-normative example presenting a use-case which rationalizes the >need for an 'optional' value is warranted - specifically one that explains >how/where within an implementation the decision to populate the ReplyTo >header in a request with an anonymous vs. a non-anonymous URI is made. > > > See above. This decision is out of our scope. That said, non-normative use cases might well make things clearer.
Received on Tuesday, 4 April 2006 19:01:26 UTC