<?xml version="1.0"?>
<!-- $Id: ws-addressing.xml,v 1.3 2004/10/28 17:05:55 mhadley Exp $ -->
<!DOCTYPE spec PUBLIC "-//W3C//DTD Specification V2.1//EN" "xmlspec.dtd" [
<!ENTITY % entities SYSTEM "entities.dtd" >
<!ENTITY document.status "Editors' copy $Date: 2004/10/28 17:05:55 $">
%entities;
]>
<?xml-stylesheet type='text/xsl' href='xmlspec-addressing.xsl'?>
<spec w3c-doctype="wd" role="&document.role;">
    <header>
        <title>&wsa-core.title;</title>
        <w3c-designation>&w3c-designation-wsa-core;</w3c-designation>
        <w3c-doctype>&document.status;</w3c-doctype>
        <pubdate>
            <day>&draft.day;</day>
            <month>&draft.month;</month>
            <year>&draft.year;</year>
        </pubdate>
        <publoc>
            <loc href="&w3c-designation-wsa-core;">&w3c-designation-wsa-core;</loc>
        </publoc> &altlocs; <prevlocs>
            <!--
      <loc href="&prevloc;">&prevloc;</loc>
-->
        </prevlocs>
        <authlist>
            <author>
                <name>@@@</name>
                <affiliation>@@@</affiliation>
            </author>
        </authlist>
        <abstract>
            <p>WS-Addressing provides transport-neutral mechanisms to address Web services and
                messages. Specifically, this specification defines XML [<bibref ref="XML10"/>,
                    <bibref ref="XMLNS"/>] elements to identify Web service endpoints and to secure
                end-to-end endpoint identification in messages. This specification enables messaging
                systems to support message transmission through networks that include processing
                nodes such as endpoint managers, firewalls, and gateways in a transport-neutral manner.</p>
        </abstract>
        <status>
            <p> This is a XMLspec-ifation of WS-Addressing. The build process has not been installed
                yet. Talk to Hugo for details. </p>
        </status>
        <langusage>
            <language id="en-US">English</language>
        </langusage>
        <revisiondesc>
            <p>Last Modified: $Date: 2004/10/28 17:05:55 $</p>
        </revisiondesc>
    </header>
    <body>
        <div1 id="tocRange">
            <head> Introduction</head>
            <p>Web Services Addressing (WS-Addressing) defines two interoperable constructs that
                convey information that is typically provided by transport protocols and messaging
                systems. These constructs normalize this underlying information into a uniform
                format that can be processed independently of transport or application. The two
                constructs are endpoint references and message information headers.</p>
            <p>A Web service endpoint is a (referenceable) entity, processor, or resource where Web
                service messages can be targeted. Endpoint references convey the information needed
                to identify/reference a Web service endpoint, and may be used in several different
                ways: endpoint references are suitable for conveying the information needed to
                access a Web service endpoint, but are also used to provide addresses for individual
                messages sent to and from Web services. To deal with this last usage case this
                specification defines a family of message information headers that allows uniform
                addressing of messages independent of underlying transport. These message
                information headers convey end-to-end message characteristics including addressing
                for source and destination endpoints as well as message identity.</p>
            <p>Both of these constructs are designed to be extensible and re-usable so that other
                specifications can build on and leverage endpoint references and message information headers.</p>
            <p>The following example illustrates the use of these mechanisms in a SOAP 1.2 message
                being sent from http://business456.example/client1 to http://fabrikam123.example/Purchasing:</p>
            <example>
                <head>@@@</head>
                <eg xml:space="preserve">
(001) &lt;S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"      
                xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"&gt;
(002)   &lt;S:Header&gt;
(003)    &lt;wsa:MessageID&gt;
(004)      uuid:6B29FC40-CA47-1067-B31D-00DD010662DA
(005)    &lt;/wsa:MessageID&gt;
(006)    &lt;wsa:ReplyTo&gt;
(007)      &lt;wsa:Address&gt;http://business456.example/client1&lt;/wsa:Address&gt;
(008)    &lt;/wsa:ReplyTo&gt;
(009)    &lt;wsa:To&gt;http://fabrikam123.example/Purchasing&lt;/wsa:To&gt;
(010)    &lt;wsa:Action&gt;http://fabrikam123.example/SubmitPO&lt;/wsa:Action&gt;
(011)   &lt;/S:Header&gt;
(012)   &lt;S:Body&gt;
(013)     ...
(014)   &lt;/S:Body&gt;
(015) &lt;/S:Envelope&gt;
</eg>
                <p>Lines (002) to (011) represent the header of the SOAP message where the
                    mechanisms defined in the specification are used. The body is represented by
                    lines (012) to (014).</p>
                <p>Lines (003) to (010) contain the message information header blocks. Specifically,
                    lines (003) to (005) specify the identifier for this message and lines (006) to
                    (008) specify the endpoint to which replies to this message should be sent as an
                    Endpoint Reference. Line (009) specifies the address URI of the ultimate
                    receiver of this message. Line (010) specifies an Action URI identifying
                    expected semantics.</p>
            </example>
            <div2 id="_Toc77464315">
                <head> Notational Conventions</head>
                <p>The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
                    "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
                    interpreted as described in RFC 2119 [<bibref ref="RFC2119"/>].</p>
                <p>When describing abstract data models, this specification uses the notational
                    convention used by the XML Infoset [<bibref ref="XMLInfoSet"/>]. Specifically,
                    abstract property names always appear in square brackets (e.g., [some property]).</p>
                <p>When describing concrete XML schemas [XML Schema <bibref ref="XMLSchemaP1"/>,
                        <bibref ref="XMLSchemaP2"/>], this specification uses the notational
                    convention of WS-Security [<bibref ref="WS-Security"/>]. Specifically, each
                    member of an element's [children] or [attributes] property is described using an
                    XPath-like notation (e.g., /x:MyHeader/x:SomeProperty/@value1). The use of {any}
                    indicates the presence of an element wildcard (&lt;xs:any/&gt;). The use
                    of @{any} indicates the presence of an attribute wildcard (&lt;xs:anyAttribute/&gt;).</p>
            </div2>
            <div2 id="_Toc77464316">
                <head> Namespaces</head>
                <p> This specification uses a number of namespace prefixes throughout; they are
                    listed in Table 1. Note that the choice of any namespace prefix is arbitrary and
                    not semantically significant (see [<bibref ref="XMLNS"/> ]).</p>
                <table summary="Namespace prefixes usage in this specification">
                    <caption>Prefixes and Namespaces used in this specification</caption>
                    <tbody>
                        <tr>
                            <th>Prefix</th>
                            <th>Namespace</th>
                        </tr>
                        <tr>
                            <td>S</td>
                            <td>http://www.w3.org/2003/05/soap-envelope</td>
                        </tr>
                        <tr>
                            <td>S11</td>
                            <td>http://schemas.xmlsoap.org/soap/envelope</td>
                        </tr>
                        <tr>
                            <td>wsa</td>
                            <td> http://schemas.xmlsoap.org/ws/2004/08/addressing </td>
                        </tr>
                        <tr>
                            <td>wsp</td>
                            <td> http://schemas.xmlsoap.org/ws/2002/12/policy</td>
                        </tr>
                        <tr>
                            <td>xs</td>
                            <td>http://www.w3.org/2001/XMLSchema</td>
                        </tr>
                    </tbody>
                </table>
                <p>WS-Addressing is defined in terms of the XML Information Set [<bibref
                    ref="XMLInfoSet"/>]. WS-Addressing is conformant to the SOAP 1.2 [<bibref
                    ref="SOAP12-PART1"/>] processing model; SOAP 1.2 is not a requirement for using
                    the constructs defined in this specification. WS-Addressing is also designed to
                    be able work with WSDL 1.1 [<bibref ref="WSDL11"/>] described services. The
                    examples in this specification use an XML 1.0 [<bibref ref="XML10"/>]
                    representation but this is not a requirement.</p>
                <p>All information items defined by WS-Addressing are identified by the XML
                    namespace URI [<bibref ref="XMLNS"/>]
                    "http://schemas.xmlsoap.org/ws/2004/08/addressing". A normative XML Schema [XML
                    Schema <bibref ref="XMLSchemaP1"/>, <bibref ref="XMLSchemaP2"/>] document can be
                    obtained by dereferencing the XML namespace URI.</p>
            </div2>
        </div1>
        <div1 id="_Toc77464317">
            <head> Endpoint References</head>
            <p>This section defines the model and syntax of an endpoint reference.</p>
            <p> This specification introduces a new description element type, the endpoint
                reference, with the intent of supporting a set of dynamic usage patterns not
                currently appropriately covered by WSDL 1.1 [<bibref ref="WSDL11"/>]. In particular,
                this specification intends to facilitate the following usage scenarios:</p>
            <ulist>
                <item>
                    <p> Dynamic generation and customization of service endpoint descriptions.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Identification and description of specific service instances that are
                        created as the result of stateful interactions.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Flexible and dynamic exchange of endpoint information in tightly coupled
                        environments where communicating parties share a set of common assumptions
                        about specific policies or protocols that are used during the interaction.</p>
                </item>
            </ulist>
            <p>To support these scenarios, we define a lightweight and extensible mechanism to
                dynamically identify and describe service endpoints and instances. Because of the
                current limits of the WSDL 1.1 extensibility model, the WSDL 1.1 service and port
                elements cannot be used to cover the use cases listed above. Endpoint references
                logically extend the WSDL description model (e.g., portTypes, bindings, etc.), but
                do not replace it. Endpoint references will be used instead of WSDL
                &lt;service/&gt; elements in the following cases:</p>
            <ulist>
                <item>
                    <p> Specific instances of a stateful service need to be identified or its
                        instance-specific configuration details need to be transmitted.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> A lightweight, self-contained description of a service endpoint needs to be
                        communicated. In particular, this may be necessary when the details of the
                        endpoint configuration are already shared by the communicating parties, but
                        specific policy information needs to be added or updated, typically as a
                        result of a dynamic configuration process.</p>
                </item>
            </ulist>
            <p>Endpoint references complement and do not replace the WSDL/1.1
                &lt;wsdl:service&gt; element. We expect solutions built on WSDL/1.1 to
                continue to utilize a service element. Moving forward we anticipate that endpoint
                references and WSDL will evolve coherently. The endpoint references may link to
                service elements in WSDL/1.1, and support additional scenarios in which the WSDL
                information is not known by a party processing a message. These scenarios may
                include dynamic messaging or limited capability message processors.</p>
            <div2 id="_Toc77464318">
                <head> Information Model for Endpoint References</head>
                <p>An endpoint reference consists of the following abstract properties:</p>
                <glist>
                    <gitem>
                        <label> [address] : URI (mandatory)</label>
                        <def>
                            <p>An address URI that identifies the endpoint. This may be a network
                                address or a logical address.</p>
                        </def>
                    </gitem>
                    <gitem>
                        <label> [reference properties] : xs:any (0..unbounded).</label>
                        <def>
                            <p>A reference may contain a number of individual properties that are
                                required to identify the entity or resource being conveyed.
                                Reference identification properties are element information items
                                that are named by QName and are required to properly dispatch
                                messages to endpoints at the endpoint side of the interaction.
                                Reference properties are provided by the issuer of the endpoint
                                reference and are otherwise assumed to be opaque to consuming
                                applications. The interpretation of these properties (as the use of
                                the endpoint reference in general) is dependent upon the protocol
                                binding and data encoding used to interact with the endpoint.
                                Section 2.3 below defines the default binding for the SOAP protocol.
                                Consuming applications SHOULD assume that endpoints represented by
                                endpoint references with different [reference properties] may accept
                                different sets of messages or follow a different set of policies,
                                and consequently may have different associated metadata (WSDL, XML
                                Schema, and WS-Policy policies ). The relationship between reference
                                properties and endpoint policies is further explained in Section 2.4.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> [reference parameters] : xs:any (0..unbounded).</label>
                        <def>
                            <p>A reference may contain a number of individual parameters which are
                                associated with the endpoint to facilitate a particular interaction.
                                Reference parameters are element information items that are named by
                                QName and are required to properly interact with the endpoint.
                                Reference parameters are also provided by the issuer of the endpoint
                                reference and are otherwise assumed to be opaque to consuming
                                applications. The use of reference parameters is dependent upon the
                                protocol binding and data encoding used to interact with the
                                endpoint. Section 2.3 describes the default binding for the SOAP
                                protocol. Unlike [reference properties], the [reference parameters]
                                of two endpoint references may differ without an implication that
                                different XML Schema, WSDL or policies apply to the endpoints.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> [selected port type] : QName (0..1)</label>
                        <def>
                            <p>The QName of the primary portType of the endpoint being conveyed.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> [service-port] : (QName, NCName (0..1)) (0..1)</label>
                        <def>
                            <p>This is the QName identifying the WSDL service element that contains
                                the definition of the endpoint being conveyed. The service name
                                provides a link to a full description of the service endpoint. An
                                optional non-qualified name identifies the specific port in the
                                service that corresponds to the endpoint.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> [policy] : wsp:policy (0..unbounded)</label>
                        <def>
                            <p>A variable number of XML policy elements as described in WS-Policy
                                    [<bibref ref="WS-Policy"/>] describing the behavior,
                                requirements and capabilities of the endpoint. Policies may be
                                included in an endpoint to facilitate easier processing by the
                                consuming application, or because the policy was dynamically
                                generated. However, embedded policies are not authoritative and may
                                be stale or incoherent with the policies associated with the
                                endpoint at the time when the interaction occurs.</p>
                        </def>
                    </gitem>
                </glist>
            </div2>
            <div2 id="_Toc77464319">
                <head> Endpoint Reference XML Infoset Representation</head>
                <p>This section defines an XML Infoset-based representation for an endpoint
                    reference as both an XML type (wsa:EndpointReferenceType) and as an XML element (&lt;wsa:EndpointReference&gt;).</p>
                <p>The wsa:EndpointReferenceType type is used wherever a Web service endpoint is
                    referenced. The following describes the contents of this type:</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;wsa:EndpointReference&gt;
    &lt;wsa:Address&gt;xs:anyURI&lt;/wsa:Address&gt;
    &lt;wsa:ReferenceProperties&gt;... &lt;/wsa:ReferenceProperties&gt; ?
    &lt;wsa:ReferenceParameters&gt;... &lt;/wsa:ReferenceParameters&gt; ?
    &lt;wsa:PortType&gt;xs:QName&lt;/wsa:PortType&gt; ?
    &lt;wsa:ServiceName PortName="xs:NCName"?&gt;xs:QName&lt;/wsa:ServiceName&gt; ?
    &lt;wsp:Policy&gt; ... &lt;/wsp:Policy&gt;*
&lt;/wsa:EndpointReference&gt;
      </eg>
                </example>
                <p>The following describes the attributes and elements listed in the schema overview above:</p>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference</label>
                        <def>
                            <p>This represents some element of type wsa:EndpointReferenceType. This
                                example uses the predefined &lt;wsa:EndpointReference&gt;
                                element, but any element of type wsa:EndpointReferenceType may be used.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:Address</label>
                        <def>
                            <p>This REQUIRED element (of type xs:anyURI) specifies the [address]
                                property of the endpoint reference. This address may be a logical
                                address or identifier for the service endpoint.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:ReferenceProperties/</label>
                        <def>
                            <p>This OPTIONAL element contains the elements that convey the
                                [reference properties] of the reference.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:ReferenceProperties/{any}</label>
                        <def>
                            <p>Each child element of ReferenceProperties represents an individual
                                [reference property].</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:ReferenceParameters/</label>
                        <def>
                            <p>This OPTIONAL element contains the elements that convey the
                                [reference parameters] of the reference.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:ReferenceParameters/{any}</label>
                        <def>
                            <p>Each child element of ReferenceParameters represents an individual
                                [reference parameter].</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:PortType</label>
                        <def>
                            <p>This OPTIONAL element (of type xs:Qname) specifies the value of the
                                [selected port type] property of the endpoint reference.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:ServiceName</label>
                        <def>
                            <p>This OPTIONAL element (of type xs:QName) specifies the
                                &lt;wsdl:service&gt; definition that contains a WSDL
                                description of the endpoint being referenced.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsa:ServiceName/@PortName</label>
                        <def>
                            <p>This OPTIONAL attribute (of type xs:NCName) specifies the name of the
                                &lt;wsdl:port&gt; definition that corresponds to the
                                endpoint being referenced.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/wsp:Policy</label>
                        <def>
                            <p>This OPTIONAL element specifies a policy that is relevant to the
                                interaction with the endpoint.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/{any}</label>
                        <def>
                            <p>This is an extensibility mechanism to allow additional elements to be specified.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:EndpointReference/@{any}</label>
                        <def>
                            <p>This is an extensibility mechanism to allow additional attributes to
                                be specified.</p>
                        </def>
                    </gitem>
                </glist>
                <p>The following illustrates an endpoint reference. This element references the port
                    of type "fabrikam:InventoryPortType" at the URI "http://www.fabrikam123.example/acct".</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;wsa:EndpointReference xmlns:wsa="..." xmlns:fabrikam="..."&gt;
   &lt;wsa:Address&gt;http://www.fabrikam123.example/acct&lt;/wsa:Address&gt;
   &lt;wsa:PortType&gt;fabrikam:InventoryPortType&lt;/wsa:PortType&gt;
&lt;/wsa:EndpointReference&gt;
      </eg>
                </example>
            </div2>
            <div2 id="_Toc77464320">
                <head> Binding Endpoint References</head>
                <p>When a message needs to be addressed to the endpoint, the information contained
                    in the endpoint reference is mapped to the message according to a transformation
                    that is dependent on the protocol and data representation used to send the
                    message. Protocol-specific mappings (or bindings) will define how the
                    information in the endpoint reference is copied to message and protocol fields.
                    This specification defines the SOAP binding for endpoint references. This
                    mapping MAY be explicitly replaced by other bindings (defined as WSDL bindings
                    or as policies); however, in the absence of an applicable policy stating that a
                    different mapping must be used, the SOAP binding defined here is assumed to
                    apply. To ensure interoperability with a broad range of devices, all conformant
                    implementations MUST support the SOAP binding.</p>
                <p>The SOAP binding for endpoint references is defined by the following two rules:</p>
                <ulist>
                    <item>
                        <p>The [address] property in the endpoint reference is copied in the
                            [destination] header field of the SOAP message.</p>
                    </item>
                    <item>
                        <p>Each [reference property] and [reference parameter] element becomes a
                            header block in the SOAP message. The element information item of each
                            [reference property] or [reference parameter] (including all of its
                            [children], [attributes] and [in-scope namespaces]) is to be added as a
                            header block in the new message.</p>
                    </item>
                </ulist>
                <p>The next example shows how the default SOAP binding for endpoint references is
                    used to construct a message addressed to the endpoint:</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;wsa:EndpointReference xmlns:wsa="..." xmlns:fabrikam="..."&gt;
   &lt;wsa:Address&gt;http://www.fabrikam123.example/acct&lt;/wsa:Address&gt;
   &lt;wsa:ReferenceProperties&gt;
       &lt;fabrikam:CustomerKey&gt;123456789&lt;/fabrikam:CustomerKey&gt;
   &lt;/wsa:ReferenceProperties&gt;
   &lt;wsa:ReferenceParameters&gt;
       &lt;fabrikam:ShoppingCart&gt;ABCDEFG&lt;/fabrikam:ShoppingCart&gt;
   &lt;/wsa:ReferenceParameters&gt;
&lt;/wsa:EndpointReference&gt;
      </eg>
                </example>
                <p>According to the mapping rules stated before, the address value is copied in the
                    "To" header and the "CustomerKey" element should be copied literally as a header
                    in a SOAP message addressed to this endpoint. The SOAP message would look as follows:</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"
         xmlns:wsa="..." xmlns:fabrikam="... "&gt;
   &lt;S:Header&gt;
     ...
    &lt;wsa:To&gt;http://www.fabrikam123.example/acct&lt;/wsa:To&gt;
    &lt;fabrikam:CustomerKey&gt;123456789&lt;/fabrikam:CustomerKey&gt;
    &lt;fabrikam:ShoppingCart&gt;ABCDEFG&lt;/fabrikam:ShoppingCart&gt;
     ...
   &lt;/S:Header&gt;
   &lt;S:Body&gt;
     ...
   &lt;/S:Body&gt;
&lt;/S:Envelope&gt;
      </eg>
                </example>
            </div2>
            <div2 id="_Toc77464321">
                <head> Endpoint Reference Comparison</head>
                <p>During the course of Web services interactions applications may receive multiple
                    endpoint references describing the endpoints it needs to interact with.
                    Different copies of an endpoint reference may also be received over time.</p>
                <p>The following rules clarify the relation between the behaviors of the endpoints
                    represented by two endpoint references with the same [address] and the same
                    [reference properties].</p>
                <ulist>
                    <item>
                        <p>The two endpoints accept the same sets of messages, and follow and
                            require the same set of policies. That is, the XML Schema, WSDL, and
                            WS-Policy metadata applicable to the two references are the same.</p>
                    </item>
                    <item>
                        <p>In particular, the policies applicable to the two endpoints are the same
                            regardless of the values of the embedded [policy]. Embedded policies are
                            not authoritative and may be stale or incoherent with the policies
                            associated with the endpoint.</p>
                    </item>
                </ulist>
                <p>The [address] properties of two endpoint references are compared according to
                    Section 6 of [<bibref ref="RFC2396"/>]. The [reference properties] of two
                    endpoint references are equal if:</p>
                <ulist>
                    <item>
                        <p>they contain the same number of individual properties;</p>
                    </item>
                    <item>
                        <p>for each reference property in one endpoint reference there exists an
                            equivalent reference property in the other. One [reference property] is
                            equivalent to another [reference property] if their byte streams per
                            Exclusive XML Canonicalization are equal.</p>
                    </item>
                </ulist>
                <p>Therefore, a consuming application should assume that different XML Schemas, WSDL
                    definitions and policies apply to endpoint references whose address or reference
                    properties differ.</p>
            </div2>
        </div1>
        <div1 id="_Toc77464322">
            <head> Message Information Headers</head>
            <p>This section defines the model and syntax of a message information header.</p>
            <p>The message information headers collectively augment a message with the following
                abstract properties. These properties enable the identification and location of the
                endpoints involved in an interaction. The basic interaction pattern from which all
                others are composed is "one way". In this pattern a source sends a message to a
                destination without any further definition of the interaction. </p>
            <p>"Request Reply" is a common interaction pattern that consists of an initial message
                sent by a source endpoint (the request) and a subsequent message sent from the
                destination of the request back to the source (the reply). A reply can be either an
                application message, a fault, or any other message.</p>
            <p>The properties below support one way, request reply, and any other interaction pattern:</p>
            <glist>
                <gitem>
                    <label> [destination] : URI (mandatory)</label>
                    <def>
                        <p>The address of the intended receiver of this message.</p>
                    </def>
                </gitem>
            </glist>
            <glist>
                <gitem>
                    <label> [source endpoint] : endpoint reference (0..1)</label>
                    <def>
                        <p>Reference of the endpoint where the message originated from.</p>
                    </def>
                </gitem>
            </glist>
            <glist>
                <gitem>
                    <label> [reply endpoint] : endpoint reference (0..1)</label>
                    <def>
                        <p>An endpoint reference that identifies the intended receiver for replies
                            to this message. If a reply is expected, a message MUST contain a [reply
                            endpoint]. The sender MUST use the contents of the [reply endpoint] to
                            formulate the reply message as defined in Section 3.2. If the [reply
                            endpoint] is absent, the contents of the [source endpoint] may be used
                            to formulate a message to the source. This property MAY be absent if the
                            message has no meaningful reply. If this property is present, the
                            [message id] property is REQUIRED.</p>
                    </def>
                </gitem>
            </glist>
            <glist>
                <gitem>
                    <label> [fault endpoint] : endpoint reference (0..1)</label>
                    <def>
                        <p>An endpoint reference that identifies the intended receiver for faults
                            related to this message. When formulating a fault message as defined in
                            Section 3.2 and 4, the sender MUST use the contents of the [fault
                            endpoint] of the message being replied to to formulate the fault
                            message. If the [fault endpoint] is absent, the sender MAY use the
                            contents of the [reply endpoint] to formulate the fault message. If both
                            the [fault endpoint] and [reply endpoint] are absent, the sender MAY use
                            the contents of the [source endpoint] to formulate the fault message.
                            This property may be absent if the sender cannot receive fault messages
                            (e.g., is a one-way application message). If this property is present,
                            the [message id] property is REQUIRED.</p>
                    </def>
                </gitem>
            </glist>
            <glist>
                <gitem>
                    <label> [action] : URI (mandatory)</label>
                    <def>
                        <p>An identifier that uniquely (and opaquely) identifies the semantics
                            implied by this message.</p>
                        <p>It is RECOMMENDED that value of the [action] property is a URI
                            identifying an input, output, or fault message within a WSDL port type.
                            An action may be explicitly or implicitly associated with the
                            corresponding WSDL definition. Section 3.3 below describes the
                            mechanisms of association. Finally, if in addition to the [action]
                            property, a SOAP Action URI is encoded in a request, the URI of the SOAP
                            Action MUST be the same as the one specified by the [action] property.</p>
                    </def>
                </gitem>
            </glist>
            <glist>
                <gitem>
                    <label> [message id] : URI (0..1)</label>
                    <def>
                        <p>A URI that uniquely identifies this message in time and space. No two
                            messages with a distinct application intent may share a [message id]
                            property. A message MAY be retransmitted for any purpose including
                            communications failure and MAY use the same [message id] property. The
                            value of this property is an opaque URI whose interpretation beyond
                            equivalence is not defined in this specification. If a reply is
                            expected, this property MUST be present. </p>
                    </def>
                </gitem>
            </glist>
            <glist>
                <gitem>
                    <label> [relationship] : (QName, URI) (0..unbounded)</label>
                    <def>
                        <p>A pair of values that indicate how this message relates to another
                            message. The type of the relationship is identified by a QName. The
                            related message is identified by a URI that corresponds to the related
                            message's [message id] property. The message identifier URI may refer to
                            a specific message, or be the following well-known URI that means
                            "unspecified message":<code> http://schemas.xmlsoap.org/ws/2004/08/addressing/id/unspecified</code>.</p>
                        <p>This specification has one predefined relationship type:</p>
                        <table summary="Description of the QName used in [relationship]">
                            <caption>Description of the QName used in [relationship]</caption>
                            <tbody>
                                <tr>
                                    <th>QName</th>
                                    <th>Description </th>
                                </tr>
                                <tr>
                                    <td>wsa:Reply</td>
                                    <td>Indicates that this is a reply to the message identified by
                                        the URI.</td>
                                </tr>
                            </tbody>
                        </table>
                        <p>A reply message MUST contain a [relationship] property consisting of
                            wsa:Reply and the message id property of the request message.</p>
                    </def>
                </gitem>
            </glist>
            <p>The dispatching of incoming messages is based on two message properties. The
                mandatory "destination" and "action" fields identify the target processing location
                and the verb or intent of the message.</p>
            <p>Due to the range of network technologies currently in wide-spread use (e.g., NAT,
                DHCP, firewalls), many deployments cannot assign a meaningful global URI to a given
                endpoint. To allow these "anonymous" endpoints to initiate message exchange patterns
                and receive replies, WS-Addressing defines the following well-known URI for use by
                endpoints that cannot have a stable, resolvable URI: <code>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</code>
            </p>
            <p>Requests whose [reply endpoint], [source endpoint] and/or [fault endpoint] use this
                address MUST provide some out-of-band mechanism for delivering replies or faults
                (e.g. returning the reply on the same transport connection). This mechanism may be a
                simple request/reply transport protocol (e.g., HTTP GET or POST). This URI MAY be
                used as the [destination] for reply messages and SHOULD NOT be used as the
                [destination] in other circumstances.</p>
            <div2 id="_Toc77464323">
                <head> Message Information Headers XML Infoset Representation</head>
                <p>The message information header blocks provide end-to-end characteristics of a
                    message that can be easily secured as a unit. The information in these headers
                    is immutable and not intended to be modified along the message path. </p>
                <p>The following describes the contents of the message information header blocks:</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;wsa:MessageID&gt; xs:anyURI &lt;/wsa:MessageID&gt;
&lt;wsa:RelatesTo RelationshipType="..."?&gt;xs:anyURI&lt;/wsa:RelatesTo&gt;
&lt;wsa:To&gt;xs:anyURI&lt;/wsa:To&gt;
&lt;wsa:Action&gt;xs:anyURI&lt;/wsa:Action&gt;
&lt;wsa:From&gt;endpoint-reference&lt;/wsa:From&gt;
&lt;wsa:ReplyTo&gt;endpoint-reference&lt;/wsa:ReplyTo&gt;
&lt;wsa:FaultTo&gt;endpoint-reference&lt;/wsa:FaultTo&gt;
</eg>
                </example>
                <p>The following describes the attributes and elements listed in the schema overview above:</p>
                <glist>
                    <gitem>
                        <label> /wsa:MessageID</label>
                        <def>
                            <p>This OPTIONAL element (of type xs:anyURI) conveys the [message id]
                                property. This element MUST be present if wsa:ReplyTo or wsa:FaultTo
                                is present.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:RelatesTo</label>
                        <def>
                            <p>This OPTIONAL (repeating) element information item contributes one
                                abstract [relationship] property value, in the form of a (URI,
                                QName) pair. The [children] property of this element (which is of
                                type xs:anyURI) conveys the [message id] of the related message.
                                This element MUST be present if the message is a reply.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:RelatesTo/@RelationshipType</label>
                        <def>
                            <p>This OPTIONAL attribute (of type xs:QName) conveys the relationship
                                type as a QName. When absent, the implied value of this attribute is wsa:Reply.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:ReplyTo</label>
                        <def>
                            <p>This OPTIONAL element (of type wsa:EndpointReferenceType) provides
                                the value for the [reply endpoint] property. This element MUST be
                                present if a reply is expected. If this element is present,
                                wsa:MessageID MUST be present.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:From</label>
                        <def>
                            <p>This OPTIONAL element (of type wsa:EndpointReferenceType) provides
                                the value for the [source endpoint] property.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:FaultTo</label>
                        <def>
                            <p>This OPTIONAL element (of type wsa:EndpointReferenceType) provides
                                the value for the [fault endpoint] property. If this element is
                                present, wsa:MessageID MUST be present.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:To</label>
                        <def>
                            <p>This REQUIRED element (of type xs:anyURI) provides the value for the
                                [destination] property.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label> /wsa:Action</label>
                        <def>
                            <p>This REQUIRED element of type xs:anyURI conveys the [action]
                                property. The [children] of this element convey the value of this property.</p>
                        </def>
                    </gitem>
                </glist>
            </div2>
            <div2 id="_Toc77464324">
                <head> Formulating a Reply Message</head>
                <p>The reply to a WS-Addressing compliant request message MUST be compliant to
                    WS-Addressing and be constructed according to the rules defined in this section.</p>
                <p>The following example illustrates a request message using message information
                    header blocks in a SOAP 1.2 message:</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
  xmlns:f123="http://www.fabrikam123.example/svc53"&gt;
  &lt;S:Header&gt; 
  &lt;wsa:MessageID&gt;uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff
    &lt;/wsa:MessageID&gt;
    &lt;wsa:ReplyTo&gt; 
    &lt;wsa:Address&gt;http://business456.example/client1&lt;/wsa:Address&gt;
    &lt;/wsa:ReplyTo&gt;
    &lt;wsa:To S:mustUnderstand="1"&gt;mailto:joe@fabrikam123.example&lt;/wsa:To&gt;
    &lt;wsa:Action&gt;http://fabrikam123.example/mail/Delete&lt;/wsa:Action&gt;
  &lt;/S:Header&gt;
  &lt;S:Body&gt;
    &lt;f123:Delete&gt;     
       &lt;maxCount&gt;42&lt;/maxCount&gt;
    &lt;/f123:Delete&gt;
  &lt;/S:Body&gt;
&lt;/S:Envelope&gt;
      </eg>
                </example>
                <p>This message would have the following property values:</p>
                <p> [destination] The URI mailto:joe@fabrikam123.example</p>
                <p> [reply endpoint] The endpoint with [address] http://business456.example/client1</p>
                <p> [action] http://fabrikam123.example/mail/Delete</p>
                <p> [message id] uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff</p>
                <p>The following example illustrates a reply message using message information
                    header blocks in a SOAP 1.2 message:</p>
                <example>
                    <head>@@@</head>
                    <eg xml:space="preserve">
&lt;S:Envelope
  xmlns:S="http://www.w3.org/2003/05/soap-envelope" 
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
  xmlns:f123="http://www.fabrikam123.example/svc53"&gt;
  &lt;S:Header&gt;
    &lt;wsa:MessageID&gt;
      uuid:aaaabbbb-cccc-dddd-eeee-wwwwwwwwwww
    &lt;/wsa:MessageID&gt;
    &lt;wsa:RelatesTo&gt;
      uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff
    &lt;/wsa:RelatesTo&gt;
    &lt;wsa:To S:mustUnderstand="1"&gt;
      http://business456.example/client1
    &lt;/wsa:To&gt;
    &lt;wsa:Action&gt;http://fabrikam123.example/mail/DeleteAck&lt;/wsa:Action&gt;
  &lt;/S:Header&gt;
  &lt;S:Body&gt;
    &lt;f123:DeleteAck/&gt;
  &lt;/S:Body&gt;
&lt;/S:Envelope&gt;
      </eg>
                </example>
                <p>This message would have the following property values:</p>
                <p> [destination] http://business456.example/client1</p>
                <p> [action] http://fabrikam123.example/mail/DeleteAck</p>
                <p> [message id] uuid:aaaabbbb-cccc-dddd-eeee-wwwwwwwww</p>
                <p> [relationship] (wsa:Reply, uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff)</p>
            </div2>
            <div2 id="_Toc77464325">
                <head> Associating Action with WSDL Operations</head>
                <p>WS-Addressing defines two mechanisms to associate an action with input, output
                    and fault elements within a WSDL port type.</p>
                <div3 id="_Toc77464326">
                    <head> Explicit Association</head>
                    <p>The action may be explicitly associated using the wsa:Action attribute or in
                        the absence of the attribute the action is defined by the rule in section 3.3.2.</p>
                    <p>For example consider the following WSDL excerpt:</p>
                    <example>
                        <head>@@@</head>
                        <eg xml:space="preserve">
&lt;definitions targetNamespace="http://example.com/stockquote" ...&gt;
  ...
  &lt;portType name="StockQuotePortType"&gt;
    &lt;operation name="GetLastTradePrice"&gt;
      &lt;input message="tns:GetTradePricesInput"
            wsa:Action="http://example.com/GetQuote"/&gt;
      &lt;output message="tns:GetTradePricesOutput"
            wsa:Action="http://example.com/Quote"/&gt;
    &lt;/operation&gt;
  &lt;/portType&gt;
  ...
&lt;/definitions&gt;
      </eg>
                    </example>
                    <p>The action for the input of the GetLastTradePrice operation within the
                        StockQuotePortType is explicitly defined to be http://example.com/GetQuote.
                        The action for the output of this same operation is http://example.com/Quote.</p>
                </div3>
                <div3 id="_Toc77464327">
                    <head> Default Action Pattern</head>
                    <p>In the absence of the wsa:Action attribute, the following pattern is used to
                        construct a default action for inputs and outputs. The general form of an
                        action URI is as follows:</p>
                    <example>
                        <head>@@@</head>
                        <eg xml:space="preserve">
[target namespace]/[port type name]/[input|output name]
</eg>
                    </example>
                    <p>The "/" is a literal character to be included in the action. The values of
                        the properties are as defined below.</p>
                    <p>[target namespace] is the target namespace (/definition/@targetNamespace). If
                        [target namespace] ends with a "/" an additional "/" is not added.</p>
                    <p>[port type name] is the name of the port type (/definition/portType/@name).</p>
                    <p>[input|output name] is the name of the element as defined in <xspecref
                            href="http://www.w3.org/TR/wsdl#_names">Section 2.4.5</xspecref> of WSDL 1.1.</p>
                    <p>For fault messages, this pattern is not applied. Instead, the following URI
                        is the default action URI for fault messages:<code> http://schemas.xmlsoap.org/ws/2004/08/addressing/fault</code>
                    </p>
                    <p>For example consider the following WSDL excerpt:</p>
                    <example>
                        <head>@@@</head>
                        <eg xml:space="preserve">
&lt;definitions targetNamespace="http://example.com/stockquote" ...&gt;
  ...
  &lt;portType name="StockQuotePortType"&gt;
    &lt;operation name="GetLastTradePrice"&gt;
      &lt;input message="tns:GetTradePricesInput" name="GetQuote"/&gt;
      &lt;output message="tns:GetTradePricesOutput" name="Quote"/&gt;
    &lt;/operation&gt;
  &lt;/portType&gt;
  ...
&lt;/definitions&gt;
      </eg>
                        <p> [targetNamespace] = http://example.com/stockquote</p>
                        <p> [port type name] = StockQuotePortType</p>
                        <p> [input name] = GetQuote</p>
                        <p> [output name] = Quote</p>
                        <p>Applying the pattern above with these values we have:</p>
                        <p>input action = http://example.com/stockquote/StockQuotePortType/GetQuote</p>
                        <p>output action = http://example.com/stockquote/StockQuotePortType/Quote</p>
                    </example>
                    <p>WSDL defines rules for a default input or output name if the name attribute
                        is not present. Consider the following example:</p>
                    <p>For example consider the following WSDL excerpt:</p>
                    <example>
                        <head>@@@</head>
                        <eg xml:space="preserve">
&lt;definitions targetNamespace="http://example.com/stockquote" ...&gt;
  ...
  &lt;portType name="StockQuotePortType"&gt;
    &lt;operation name="GetLastTradePrice"&gt;
      &lt;input message="tns:GetTradePricesInput"/&gt;
      &lt;output message="tns:GetTradePricesOutput"/&gt;
    &lt;/operation&gt;
  &lt;/portType&gt;
  ...
&lt;/definitions&gt;
      </eg>
                        <p> [targetNamespace] = http://example.com/stockquote</p>
                        <p> [port type name] = StockQuotePortType</p>
                        <p>According to the rules defined in WSDL 2.4.5, if the name attribute is
                            absent for the input of a request response operation the default value
                            is the name of the operation "Request" appended.</p>
                        <p> [input name] = GetLastTradePriceRequest</p>
                        <p>Likewise, the output defaults to the operation name with "Response" appended.</p>
                        <p> [output name] = GetLastTradePriceResponse</p>
                        <p>Applying the pattern above with these values we have:</p>
                        <p>input action = http://example.com/stockquote/StockQuotePortType/GetLastTradePriceRequest</p>
                        <p>output action = http://example.com/stockquote/StockQuotePortType/GetLastTradePriceResponse</p>
                    </example>
                </div3>
            </div2>
        </div1>
        <div1 id="_Toc77464328">
            <head>Faults</head>
            <p>The faults defined in this section are generated if the condition stated in the
                preamble in each subsection is met. They are sent to the [fault endpoint], if
                present and valid. Otherwise they are sent to the [reply endpoint] if present. If
                neither is present faults may be sent to the [source endpoint].</p>
            <p>Endpoints compliant with this specification MUST include required message information
                headers on all fault messages. Fault messages are correlated as replies using the
                [relationship] property as defined in Section 3. The [action] property below
                designates WS-Addressing fault messages (this URI is also used as default Action
                value for WSDL fault messages, as described in Section 3.3.2):</p>
            <example>
                <head>@@@</head>
                <eg xml:space="preserve">
http://schemas.xmlsoap.org/ws/2004/08/addressing/fault
</eg>
            </example>
            <p>The definitions of faults use the following properties:</p>
            <p> [Code] The fault code.</p>
            <p> [Subcode] The fault subcode.</p>
            <p> [Reason] The English language reason element.</p>
            <p> [Detail] The detail element. If absent, no detail element is defined for the fault.</p>
            <p>The properties above bind to a SOAP 1.2 fault as follows:</p>
            <example>
                <head>@@@</head>
                <eg xml:space="preserve">
&lt;S:Envelope&gt;
 &lt;S:Header&gt;
   &lt;wsa:Action&gt;
     http://schemas.xmlsoap.org/ws/2004/08/addressing/fault
   &lt;/wsa:Action&gt;
   &lt;!-- Headers elided for clarity.  --&gt;
 &lt;/S:Header&gt;
 &lt;S:Body&gt;
  &lt;S:Fault&gt;
   &lt;S:Code&gt;
    &lt;S:Value&gt;[Code]&lt;/S:Value&gt;
     &lt;S:Subcode&gt;
    &lt;S:Value&gt;[Subcode]&lt;/S:Value&gt;
     &lt;/S:Subcode&gt;
   &lt;/S:Code&gt;
   &lt;S:Reason&gt;
     &lt;S:Text xml:lang="en"&gt;[Reason]&lt;/S:Text&gt;
   &lt;/S:Reason&gt;
   &lt;S:Detail&gt;
     [Detail]
  &lt;/S:Detail&gt;   
  &lt;/S:Fault&gt;
 &lt;/S:Body&gt;
&lt;/S:Envelope&gt;
      </eg>
            </example>
            <p>The SOAP 1.1 fault is less expressive and map only [Subcode] and [Reason]. These the
                properties bind to a SOAP 1.1 fault as follows:</p>
            <example>
                <head>@@@</head>
                <eg xml:space="preserve">
&lt;S11:Envelope&gt;
 &lt;S11:Body&gt;
  &lt;S11:Fault&gt;
   &lt;faultcode&gt;[Subcode]&lt;/faultcode&gt;
   &lt;faultstring xml:lang="en"&gt;[Reason]&lt;/faultstring&gt;
  &lt;/S11:Fault&gt;
 &lt;/S11:Body&gt;
&lt;/S11:Envelope&gt;
      </eg>
            </example>
            <div2 id="_Toc77464329">
                <head> Invalid Message Information Header</head>
                <p>A message information header cannot be processed.</p>
                <p> [Code] S:Sender</p>
                <p> [Subcode] wsa:InvalidMessageInformationHeader</p>
                <p> [Reason] A message information header is not valid and the message cannot be
                    processed. The validity failure can be either structural or semantic, e.g. a
                    [destination] that is not a URI or a [relationship] to a [message id] that was
                    never issued.</p>
                <p> [Detail] [invalid header]</p>
            </div2>
            <div2 id="_Toc77464330">
                <head> Message Information Header Required</head>
                <p>A required message information header is absent.</p>
                <p> [Code] S:Sender</p>
                <p> [Subcode] wsa:MessageInformationHeaderRequired</p>
                <p> [Reason] A required message information header, To, MessageID, or Action, is not present.</p>
                <p> [Detail] [Missing Header QName]</p>
            </div2>
            <div2 id="_Toc77464331">
                <head> Destination Unreachable</head>
                <p>The no endpoint can be found capable of acting in the role of the [destination] property.</p>
                <p> [Code] S:Sender</p>
                <p> [Subcode] wsa:DestinationUnreachable</p>
                <p> [Reason] No route can be determined to reach the destination role defined by the
                    WS-Addressing To.</p>
                <p> [Detail] empty</p>
            </div2>
            <div2 id="_Toc55895108">
                <head> Action Not Supported</head>
                <p>The [action] property in the message is not supported at this endpoint.</p>
                <p>The contents of this fault are as follows:</p>
                <p> [Code] S:Sender</p>
                <p> [Subcode] wsa:ActionNotSupported</p>
                <p> [Reason] The [action] cannot be processed at the receiver.</p>
                <p> [Detail] [action]</p>
            </div2>
            <div2 id="_Toc77464333">
                <head> Endpoint Unavailable</head>
                <p>The endpoint is unable to process the message at this time either due to some
                    transient issue or a permanent failure. </p>
                <p>The endpoint may optionally include a RetryAfter parameter in the detail. The
                    source should not retransmit the message until this duration has passed.</p>
                <p> [Code] S:Receiver</p>
                <p> [Subcode] wsa:EndpointUnavailable</p>
                <p> [Reason] The endpoint is unable to process the message at this time.</p>
                <p> [Detail] &lt;wsa:RetryAfter ...&gt;[xs:NonNegativeInteger]&lt;/wsa:RetryAfter&gt;</p>
                <p> The following describes the attributes and elements listed above:</p>
                <glist>
                    <gitem>
                        <label>/wsa:RetryAfter</label>
                        <def>
                            <p>This element (of type xs:NonNegativeInteger) is a suggested minimum
                                duration in milliseconds to wait before retransmitting the message.
                                If this element is omitted from the detail, the value is infinite.</p>
                        </def>
                    </gitem>
                </glist>
                <glist>
                    <gitem>
                        <label>/wsa:RetryAfter/@{any}</label>
                        <def>
                            <p>These optional extensibility attributes do not affect processing.</p>
                        </def>
                    </gitem>
                </glist>
            </div2>
        </div1>
        <div1 id="_Toc77464334">
            <head> Security Considerations</head>
            <p>It is strongly recommended that the communication between services be secured using
                the mechanisms described in WS-Security [<bibref ref="WS-Security"/>]. In order to
                properly secure messages, the body and all relevant headers need to be included in
                the signature. Specifically, the message information headers described in this
                specification (e.g. &lt;wsa:To&gt;) need to be signed with the body in order
                to "bind" the two together. It should be noted that for messages traveling through
                intermediaries, it is possible that some or all of the message information headers
                may have multiple signatures when the message arrives at the ultimate receiver. It
                is strongly recommended that the initial sender include a signature to prevent any
                spoofing by intermediaries.</p>
            <p>Whenever an address is specified (e.g. &lt;wsa:From&gt;,
                &lt;wsa:ReplyTo&gt;, &lt;wsa:FaultTo&gt;, ...), the processor should
                ensure that a signature is provided with claims allowing it to speak for the
                specified target in order to prevent certain classes of attacks (e.g. redirects). As
                well, care should be taken if the specified endpoint contains resource properties or
                parameters as unverified endpoint references could cause certain classes of header
                insertion attacks.</p>
            <p>The message information headers blocks may have their contents encrypted in order to
                obtain end-to-end privacy, but care should be taken to ensure that intermediary
                processors have access to required information (e.g. &lt;wsa:To&gt;).</p>
            <p>Some processors may use message identifiers (&lt;wsa:MessageID&gt;) as part
                of a uniqueness metric in order to detect replays of messages. Care should be taken
                to ensure that a unique identifier is actually used. For example, it may be
                appropriate in some scenarios to combine the message identifier with a timestamp.</p>
            <p>The following list summarizes common classes of attacks that apply to this protocol
                and identifies the mechanism to prevent/mitigate the attacks:</p>
            <ulist>
                <item>
                    <p> Message alteration &#x2013; Alteration is prevented by including
                        signatures of the message information using WS-Security.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Message disclosure &#x2013; Confidentiality is preserved by encrypting
                        sensitive data using WS-Security.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Address spoofing &#x2013; Address spoofing is prevented by ensuring that
                        all address are signed by a party authorized to speak for (or on behalf of)
                        the address.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Key integrity &#x2013; Key integrity is maintained by using the
                        strongest algorithms possible (by comparing secured policies &#x2013;
                        see WS-Policy [<bibref ref="WS-Policy"/>] and WS-SecurityPolicy [<bibref ref="WS-SecurityPolicy"/>]).</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Authentication &#x2013; Authentication is established using the
                        mechanisms described in WS-Security and WS-Trust [<bibref ref="WS-Trust"/>].
                        Each message is authenticated using the mechanisms described in WS-Security.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Accountability &#x2013; Accountability is a function of the type of and
                        strength of the key and algorithms being used. In many cases, a strong
                        symmetric key provides sufficient accountability. However, in some
                        environments, strong PKI signatures are required.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Availability &#x2013; All reliable messaging services are subject to a
                        variety of availability attacks. Replay detection is a common attack and it
                        is recommended that this be addressed by the mechanisms described in
                        WS-Security and/or caching of message identifiers. Other attacks, such as
                        network-level denial of service attacks are harder to avoid and are outside
                        the scope of this specification. That said, care should be taken to ensure
                        that minimal state is saved prior to any authenticating sequences.</p>
                </item>
            </ulist>
            <ulist>
                <item>
                    <p> Replay &#x2013; Messages may be replayed for a variety of reasons. To
                        detect and eliminate this attack, mechanisms should be used to identify
                        replayed messages such as the timestamp/nonce outlined in WS-Security.
                        Alternatively, and optionally, other technologies, such as sequencing, can
                        also be used to prevent replay of application messages.</p>
                </item>
            </ulist>
        </div1>
        <div1 id="_Toc77464336">
            <head> References</head>
            <blist>
                <bibl key="IETF RFC 2119" href="http://www.ietf.org/rfc/rfc2119.txt" id="RFC2119">
                    <titleref>Key words for use in RFCs to Indicate Requirement Levels</titleref>,
                    S. Bradner, Author. Internet Engineering Task Force, June 1999. Available at
                    http://www.ietf.org/rfc/rfc2119.txt. </bibl>
                <bibl id="RFC2396" key="RFC 2396bis"
                    href="http://www.ietf.org/internet-drafts/draft-fielding-uri-rfc2396bis-06.txt">
                    T. Berners-Lee, et al, "Uniform Resource Identifier (URI): Generic Syntax,",
                    W3C/MIT, July 2004.</bibl>
                <bibl id="XML10" key="XML 1.0" href="http://www.w3.org/TR/2000/REC-xml-20001006">
                    <titleref>Extensible Markup Language (XML) 1.0 (Second Edition)</titleref>, T.
                    Bray, J. Paoli, C. M. Sperberg-McQueen, and E. Maler, Editors. World Wide Web
                    Consortium, 10 February 1998, revised 6 October 2000. This version of the XML
                    1.0 Recommendation is http://www.w3.org/TR/2000/REC-xml-20001006. The <loc
                        href="http://www.w3.org/TR/REC-xml">latest version of XML 1.0</loc> is
                    available at http://www.w3.org/TR/REC-xml. </bibl>
                <bibl id="XMLNS" key="XML Namespaces" href="http://www.w3.org/TR/1999/REC-xml-names-19990114">
                    <titleref>Namespaces in XML</titleref>, T. Bray, D. Hollander, and A. Layman,
                    Editors. World Wide Web Consortium, 14 January 1999. This version of the XML
                    Information Set Recommendation is
                    http://www.w3.org/TR/1999/REC-xml-names-19990114. The <loc
                        href="http://www.w3.org/TR/REC-xml-names">latest version of Namespaces in
                    XML</loc> is available at http://www.w3.org/TR/REC-xml-names. </bibl>
                <bibl id="XMLInfoSet" key="XML Information Set" href="http://www.w3.org/TR/2001/REC-xml-infoset-20011024">
                    <titleref>XML Information Set</titleref>, J. Cowan and R. Tobin, Editors. World
                    Wide Web Consortium, 24 October 2001. This version of the XML Information Set
                    Recommendation is http://www.w3.org/TR/2001/REC-xml-infoset-20011024. The <loc
                        href="http://www.w3.org/TR/xml-infoset">latest version of XML Information
                    Set</loc> is available at http://www.w3.org/TR/xml-infoset. </bibl>
                <bibl id="XMLSchemaP1" key="XML Schema Structures" href="http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/">
                    <titleref>XML Schema Part 1: Structures</titleref>, H. Thompson, D. Beech, M.
                    Maloney, and N. Mendelsohn, Editors. World Wide Web Consortium, 2 May 2001. This
                    version of the XML Schema Part 1 Recommendation is
                    http://www.w3.org/TR/2001/REC-xmlschema-1-20010502. The <loc
                        href="http://www.w3.org/TR/xmlschema-1/">latest version of XML Schema Part
                    1</loc> is available at http://www.w3.org/TR/xmlschema-1. </bibl>
                <bibl key="XML Schema Datatypes" id="XMLSchemaP2" href="http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/">
                    <titleref>XML Schema Part 2: Datatypes</titleref>, P. Byron and A. Malhotra,
                    Editors. World Wide Web Consortium, 2 May 2001. This version of the XML Schema
                    Part 2 Recommendation is http://www.w3.org/TR/2001/REC-xmlschema-2-20010502. The
                        <loc href="http://www.w3.org/TR/xmlschema-2/">latest version of XML Schema
                        Part 2</loc> is available at http://www.w3.org/TR/xmlschema-2. </bibl>
                <bibl id="SOAP12-PART1" key="SOAP 1.2 Part 1: Messaging Framework" href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/">
                    <titleref>SOAP Version 1.2 Part 1: Messaging Framework</titleref>, M. Gudgin, M.
                    Hadley, N. Mendelsohn, J-J. Moreau, H. Frystyk Nielsen, Editors. World Wide Web
                    Consortium, 24 June 2003. This version of the "SOAP Version 1.2 Part 1:
                    Messaging Framework" Recommendation is
                    http://www.w3.org/TR/2003/REC-soap12-part1-20030624/. The <loc
                        href="http://www.w3.org/TR/soap12-part1/">latest version of "SOAP Version
                        1.2 Part 1: Messaging Framework"</loc> is available at
                    http://www.w3.org/TR/soap12-part1/. </bibl>
                <bibl id="WSDL11" key="WSDL 1.1"
                    href="http://www.w3.org/TR/2001/NOTE-wsdl-20010315">E. Christensen, et al,
                        <titleref>Web Services Description Language (WSDL) 1.1</titleref>, March 2001.</bibl>
                <bibl id="WS-Security" key="WS-Security"
                    href="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf">
                    OASIS, <titleref>Web Services Security: SOAP Message Security</titleref>, March 2004.</bibl>
                <bibl id="WS-SecurityPolicy" key="WS-SecurityPolicy"
                    href="http://msdn.microsoft.com/ws/2002/12/ws-security-policy/">G. Della-Libera,
                    et al, <titleref>Web Services Security Policy Language
                    (WS-SecurityPolicy)</titleref>, December 2002.</bibl>
                <bibl id="WS-Trust" key="WS-Trust"
                    href="http://msdn.microsoft.com/ws/2004/04/ws-trust/"> S. Anderson, et al,
                        <titleref>Web Services Trust Language (WS-Trust)</titleref>, May 2004.</bibl>
                <bibl id="WS-Policy" key="WS-Policy"
                    href="http://msdn.microsoft.com/ws/2002/12/Policy/">D. Box, et al, <titleref>Web
                        Services Policy Framework (WS-Policy)</titleref>," May 2003.</bibl>
            </blist>
        </div1>
    </body>
    <back>
        <inform-div1 id="_Toc77464335">
            <head> Acknowledgements </head>
            <p>@@@</p>
        </inform-div1>
        <inform-div1 id="changelog">
            <head>Change log</head>
            <table id="wsdl-spec-changelog-table" border="1">
                <tbody>
                    <tr>
                        <th rowspan="1" colspan="1">Date</th>
                        <th rowspan="1" colspan="1">Author</th>
                        <th rowspan="1" colspan="1">Description</th>
                    </tr>
                    <!-- template
		 <tr>
		 <td>2004-10-</td>
		 <td></td>
		 <td></td>
		 </tr>
	    -->
                    <tr>
                        <td>2004-10-19</td>
                        <td>HH</td>
                        <td>Converted to XMLspec, reformated bibliography</td>
                    </tr>
                </tbody>
            </table>
        </inform-div1>
    </back>
</spec>

