We have already seen this problem where the requirement is to take an
already existing service and allow asynchronous calls against
request-response operations (actually, we already did async in a
proprietary config-file type way and now want to use WS-Addressing to
achieve the same thing with old WSDLs).
I would agree with Katy that defaulting the input wsa:Action to the
SOAPAction if present would solve this problem. The output and fault
actions could keep their current defaults (I assume it is only the
input wsa:Action that has to match SOAPAction).
Pete
Katy Warr wrote:
What is the correct behaviour for
gen'ing
wsa:Action in the client when the HTTP 1.1 SOAPAction is set ( i.e. not
"") and there is no wsaw:Action explicitly specified in the WSDL?
The problem is that, the default
action
pattern for wsa:Action cannot be gauranteed to generate a wsa:action to
match SOAPAction.
Here is an example to illustrate:
<binding
name="StockQuoteSoapBinding"
type="tns:StockQuotePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsaw:UsingAddressing
wsdl:required="true"
/>
<operation
name="GetLastTradePrice">
<soap:operation
soapAction="http://example.com/GetLastTradePrice"
/>
<input>
<soap:body use="literal"
/>
</input>
<output>
<soap:body use="literal"
/>
</output>
</operation>
</binding>
If we use the default action pattern
to generate the wsa:Action, this is the result for the input operation
http://example.com/StockQuotePortType/GetLastTradePriceInput
As this is not the same as the
SOAPAction, this will cause non-compliance. The WSDL in this case
is implicitly inconsistent with the wsa spec - a problem which will
occur
in every existing WSDL 1.1 in which the values of SOAPAction have not
been
constructed according to the default action pattern.
A possible solution is to set the
wsa:Action
header to SOAPAction (if SOAPAction =! "") in preference to using
the default action pattern (if the wsa:Action is not specified
explicitly).
This would means a change something
like this in the wsdl spec:
4.3 Default Action Pattern for
WSDL 1.1
In the absence of the wsa:Action
attribute....
==>When using the SOAP 1.1 HTTP
binding,
if the SOAPAction is set, the action for inputs and outputs MUST be the
same as this and the default action pattern is not used. <==