All,
The editors (Chris, Dave and I) have had a few concalls to discuss how
to satisfy WSD/WSA requirements wrt one-way/SOAP-request SOAP-MEP, as
requested by the WG. The discussion revolved around how to satisfy the
WSD/WSA requirements, how to make things easy to describe in WSDL, how
to enable WS-Addressing to do various interesting things and the
question of transport-level MEPs/SOAP-level MEPs/WSDL-level
MEPS/Application-level MEPs and how all of this ties in together.
Two approaches have emerged from the discussions. The editors have not
come to a consensus on a particular approach/recommendation and have
decided that the best way forward would be to bring the two approaches
to the WG's attention and have a discussion about these approaches in
the WG. Below is a very brief summary of the two approaches. The
summary does not cover all the details and may have missed key points
(Chris/Dave, pl. do send corrections).
1) Über-MEP: Define an MEP that allows multiple optional input messages
and multiple optional output message. Define a framework consisting of
properties that allows one to constraint the number/optionality of
input/output messages. By using these properties one can define in-out,
in-only, out-only etc exchanges. These properties can be used to define
transport bindings (including HTTP-binding). The properties can also be
used by a WSDL document in its binding section, in conjunction with the
über-MEP, to describe a specific MEP "instance" or interaction.
[Dave will be sending a separate email on this approach with more
details (and perhaps corrections to my summary)]
2) No-MEP: Don't define an abstract SOAP MEP(s) which can be bound to
various transports. Abstract SOAP MEPs are not useful because:
- One still has to define how that SOAP MEP is used with a
particular transport and
- WS-Addressing provides a way to specify whether SOAP messages
are sent on the transport-level back-channel or not, potentially
modifying the abstract SOAP MEP.
Instead, we specify how SOAP messages are carried by specific
transport-level messages. In the case of HTTP, we specify :
1) how HTTP requests can be sent with a SOAP env in
its entity body, HTTP-methods allowed/required/disallowed, and
constraints on HTTP header/values, if any.
2) how HTTP requests can be sent without a SOAP env in
its entity body, HTTP-methods allowed/required/disallowed and
constraints on HTTP header/values, if any.
3) how HTTP response can be sent with a SOAP env in its
entity body and constraints on HTTP header/values, if any.
4) how HTTP response can be sent without a SOAP env in
its entity body and constraints on HTTP header/values, if any.
The user of the HTTP transport binding decides which method to use,
whether
to have the SOAP env in the entity body or not. To that end, the WSDL
description and/or WS-A headers may help constraint the HTTP-method,
whether there is a SOAP env in the response etc. If needed, we may
choose to define HTTP specific properties that can be used by WSDL
descriptions to specify constraints such as: entity body of a HTTP
response must/must not be empty.
Example 1:
A WSDL processor processes a WSDL containing a req-res WSDL MEP along
with a SOAP/HTTP binding and decides to send a SOAP request over HTTP
request, it includes the wsa:ReplyTo with a value of "anonymous". The
service
then responds with a HTTP response containing the SOAP response.
Example 2:
A WSDL processor processes a WSDL containing a req-res WSDL MEP along
with a SOAP/HTTP binding and decides to send a SOAP request over HTTP
request, it includes the wsa:ReplyTo with a value of
non-"anonymous"-soap-http
endpoint. The service then responds with a HTTP response containing an
empty entity-body. The service also sends a HTTP request containing a
SOAP response to the endpoint pointed to by wsa:ReplyTo. The endpoint
pointed to by wsa:ReplyTo responds with a HTTP response containing an
empty entity body.
Thanks.
-Anish
--