I thought I'd write up and share a fairly quick comparison of WS-Addressing and WS-MessageDelivery. I wrote this up to help some of our folks do a comparison, and it might be useful to other folks. I'm sure I've made some errors and people will let me know, so count on another revision or 2 :-)
The SOAP Headers are very similar, matching up almost exactly.
The WS-Addressing specification relies on the contents of run time messages to implicitly define message exchange patterns when just WS-Addressing is used and WS-Policy for interactions that are WS-Addressing dependent. For example, WS-ReliableMessaging uses WS-Addressing, and WS-RM is attached to a Web service by WS-Policy statements. WS-Addressing uses Endpoint References for refering to service instances.
WS-MD provides WSDL extensions and features and properties for a number of it's functions. To a certain extent, WS-Addressing as part of the WS-* stack uses WS-Policy for extensibility and WS-MD uses features and properties for extensibility. WS-MD uses a WS-Ref structure to identify service instances.
Endpoint addresses
WS-Addressing uses an Endpoint reference consisting of a URI address, reference properties, port type, service Qname, and Policy to provide identifying information. Reference Properties are information items sent in an Endpoint Reference and then echoed as a soap header on any response.
WS-MD defines a WS-Ref that uses a WSDL service element and mixes in a portType reference to constrain the service to a particular portType. There are 3 flavours of WS-Ref: portType + binding static, portType static + binding dynamic, and portType + binding dymamic. WS-MD uses WS-Ref, URI, a Service QName, and optional extensibility elements for endpoints. When a WS-Ref is present, the endpoint address should also have a wsdl:location attribute set. An endpoint address requires a targetNamespace when the wsdl 1.1 service element does not have a target namespace. There is no facility for requiring echoing of information ala reference properties.
Message Information Headers
A table of properties(types):
WS-Addressing WS-MD
From (EPR) MessageOriginator (wsdlLocation|service|uri|serviceQname)
To (URI) MessageDestination (wsdlLocation|service|uri|serviceQname)
ReplyTo (EPR) ReplyDestination (wsdlLocation|service|uri|serviceQname)
FaultDestination (EPR) FaultTo (wsdlLocation|service|uri|serviceQname)
MessageID (URI) MessageId (URI)
RelatesTo (URI) MessageReference (URI)
Action (URI) OperationName (NCName)
The required WS-Addressing information headers are "To" and "Action". MessageId is required when FaultTo or ReplyTo are present on a request. The rest are optional. WS-MD required headers are MEP dependent.
WS-Addressing provides an "anonymous" URI in cases where endpoints can't be specified in a message and an EPR is required.
WS-Addressing provides 2 mechanisms to associate the Action field with WSDL elements in a portType. There is an explicit association where the action is specified in the input/output/fault, a default action based upon the input/output name or the WSDL 1.1 section 2.4.5 rules for naming anonymous input/output. WS-MD provides no mechanism for supplying a different name than the operation or for generating an operation name in an anonymous input/output.
Faults
WS-Addressing provides 5 faults and bindings of the faults to SOAP 1.1 and SOAP 1.2.
WS-MD provides no faults.
Message Exchange Patterns
WS-Addressing defines no MEPs.
WS-MD defines the messageDeliveryFeature feature for operations and bindings that specify the information headers required for messages in the 4 WSDL defined message exchange patterns. The implication is that a client will know which headers must be sent for a given mep by using the WSDL.
Callback MEP
WS-Addressing implicitly defines a callback whenever a ReplyTo or FaultTo header is present.
WS-MD explicitly defines a callback by the use of a "ResponseOperation" WSDL element that may be present on a one-way or request/response operation to indicate which other operation is the response. This is similar to the BPEL "partner/servicelink" construct.
WSDL 2.0
WS-Addressing makes no reference to WSDL 2.0.
WS-MD WS-Ref structure is replaced by the WSDL 2.0 service element. The required information headers for the 7 WSDL 2.0 MEPs is defined.