Issue 59 alternate proposal

In fulfillment of my action item from this weeks telcon, below is an  
alternate proposal for issue 59 that is not SOAP/HTTP specific and  
supports alternate bindings for async responses. Most of the  
requirements and considerations detailed in the prior proposal[2]  
still apply and for brevity I have not duplicated them here.

Marc.

[1] http://www.w3.org/2002/ws/addr/wd-issues/#i059
[2] http://www.w3.org/mid/ 
2BA6015847F82645A9BB31C7F9D6416556A801@uspale20.pal.sap.corp

---8<---

The wsaw:UsingAddressing element is extended with a boolean attribute  
called "asyncOnly". When false, the endpoint can support either  
synchronous or asynchronous usage; when true the endpoint can only  
support asynchronous use. The default value of asyncOnly is false.  
Asynchronous capabilities are declared using a new wsaw:Async element  
as described below.

A new element, wsaw:Async, is used to declare asynchronous  
capabilities. The element is empty with a single optional attribute  
called 'binding'. The binding attribute is of type xs:QName and is  
used to refer to a WSDL binding of the same interface/port type to a  
protocol. Omission of the  attribute is equivalent to its inclusion  
with a value that refers to the same binding for which the  
asynchronous capabilities are being declared.

Some examples (for ease of comparison, I only include examples that  
show UsingAddressing in a WSDL 2.0 binding but the intent is that  
this could also be used in an endpoint, operation or the WSDL 1.1  
equivalents):

(i) A sync-only binding

<binding name="reservationSOAPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
   <wsaw:UsingAddressing wsdl:required="true" />
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

(ii) A sync/async binding where the operation responses can either be  
sent over the HTTP response or using a separate HTTP request

<binding name="reservationSOAPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
   <wsaw:UsingAddressing wsdl:required="true">
     <wsaw:Async/>
   </wsaw:UsingAddressing>
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

(iii) An async-only binding where the operation response is always  
sent over a separate HTTP connection

<binding name="reservationSOAPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
   <wsaw:UsingAddressing asyncOnly="true" wsdl:required="true">
     <wsaw:Async/>
   </wsaw:UsingAddressing>
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

(vi) An async-only SOAP/HTTP binding where the operation responses  
are sent in an email. I made up the http://www.w3.org/2003/05/soap/ 
bindings/SMTP protocol identifier as an example.

<binding name="reservationSOAPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
   <wsaw:UsingAddressing asyncOnly="true" wsdl:required="true">
     <wsaw:Async binding="tns:reservationSOAPSMTPBinding"/>
   </wsaw:UsingAddressing>
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

<binding name="reservationSOAPSMTPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/SMTP">
   <wsaw:UsingAddressing wsdl:required="true"/>
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

(v) A sync/async SOAP/HTTP binding where the operation responses can  
either be sent over the HTTP response, using a separate HTTP request,  
or in an email. I made up the http://www.w3.org/2003/05/soap/bindings/ 
SMTP protocol identifier as an example.

<binding name="reservationSOAPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP">
   <wsaw:UsingAddressing wsdl:required="true">
     <wsaw:Async/>
     <wsaw:Async binding="tns:reservationSOAPSMTPBinding"/>
   </wsaw:UsingAddressing>
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

<binding name="reservationSOAPSMTPBinding"
     interface="tns:reservationInterface"
     type="http://www.w3.org/2005/08/wsdl/soap12"
     wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/SMTP">
   <wsaw:UsingAddressing wsdl:required="true"/>
   <operation ref="tns:opCheckAvailability"
       wsoap:mep="http://www.w3.org/2003/05/soap/mep/request- 
response" />
   <fault ref="tns:invalidDataFault" wsoap:code="soap:Sender" />
</binding>

The above covers declaration of asynchronous support at the endpoint  
or binding granularity. It may also be desirable to support such  
declaration at the operation level though I'm not convinced that it  
makes sense to extend such granularity to the UsingAddressing element  
itself. To declare async support at the operation level I'd propose  
to allow the UsingAddressing element to be used at the WSDL operation  
level with the following semantics:

(a) The value of the UsingAddressing/@asyncOnly specified at the  
binding or port level is overidden by the value of the  
UsingAddressing/@asyncOnly specified at the operation level
(b) The child wsaw:Async elements of the UsingAddressing specified at  
the operation level are added to the child wsaw:Async elements of the  
UsingAddressing specified at the binding or port level.

---
Marc Hadley <marc.hadley at sun.com>
Business Alliances, CTO Office, Sun Microsystems.

Received on Tuesday, 1 November 2005 22:45:51 UTC