27
WS-Addressing WS-Addressing Enabling Transport-Neutral Enabling Transport-Neutral Message Addressing and Message Addressing and Correlation Correlation Jeffrey Hasan, MCSD Jeffrey Hasan, MCSD President President Bluestone Partners, Inc. Bluestone Partners, Inc.

WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Embed Size (px)

DESCRIPTION

My presentation discusses the principles of the WS-Addressing specification, which enables Transport-Neutral Message Addressing and Correlation in SOA

Citation preview

Page 1: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WS-AddressingWS-AddressingEnabling Transport-Neutral Message Enabling Transport-Neutral Message Addressing and CorrelationAddressing and Correlation

Jeffrey Hasan, MCSDJeffrey Hasan, MCSDPresidentPresidentBluestone Partners, Inc.Bluestone Partners, Inc.

Page 2: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Talk AgendaTalk Agenda What Is “Transport-Neutral”?What Is “Transport-Neutral”? WSDL and AddressingWSDL and Addressing WS-Addressing ConstructsWS-Addressing Constructs

Message Information HeadersMessage Information Headers Endpoint ReferencesEndpoint References

WSE 2.0 Addressing NamespaceWSE 2.0 Addressing Namespace WSE 2.0 Messaging NamespaceWSE 2.0 Messaging Namespace Addressing and Messaging DemosAddressing and Messaging Demos

Using HTTP and TCPUsing HTTP and TCP

Page 3: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

About MeAbout Me Jeffrey HasanJeffrey Hasan

[email protected]@bluestonepartners.com

President, Bluestone Partners Inc.President, Bluestone Partners Inc. An IT consulting company based in Orange County. We build An IT consulting company based in Orange County. We build

business applications using .NET. Our speciality is SOA.business applications using .NET. Our speciality is SOA.

Author of: Author of: Expert Service-Oriented Architecture in C#: Using the Web Expert Service-Oriented Architecture in C#: Using the Web

Services Enhancements 2.0 (APress, 2004)Services Enhancements 2.0 (APress, 2004) Performance Tuning and Optimizing ASP.NET Applications,Performance Tuning and Optimizing ASP.NET Applications,

APress, 2003. ISBN: 1590590724.APress, 2003. ISBN: 1590590724. ADO.NET Programmer’s Reference,ADO.NET Programmer’s Reference, Wrox Press, 2001. Wrox Press, 2001. Professional .NET Framework,Professional .NET Framework, Wrox Press, 2001. Wrox Press, 2001. Professional VB6 Web Programming,Professional VB6 Web Programming, Wrox Press, 1999. Wrox Press, 1999. Articles for Articles for MSDN MagazineMSDN Magazine and and asp.NET Pro Magazineasp.NET Pro Magazine..

Page 4: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

New SOA / WSE 2.0 BookNew SOA / WSE 2.0 Book

Expert Service Oriented Expert Service Oriented Architecture in C#Architecture in C#

Using the Web Services Using the Web Services Enhancements 2.0Enhancements 2.0

Published by: APress (August 2004)Published by: APress (August 2004) ISBN: 1590593901ISBN: 1590593901 http://www.bluestonepartners.com/soahttp://www.bluestonepartners.com/soa

Page 5: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

What Is “Transport-Neutral?”What Is “Transport-Neutral?”

Traditional Web services communicate over the HTTP protocol and use a Traditional Web services communicate over the HTTP protocol and use a traditional request/response communication pattern, in which a client traditional request/response communication pattern, in which a client request results in a synchronous, direct service response. request results in a synchronous, direct service response.

This model is very limiting because it does not accommodate long-This model is very limiting because it does not accommodate long-running service calls that may take minutes, hours, or days to complete.running service calls that may take minutes, hours, or days to complete.

Alternate transport protocols such as TCP are not limited to the Alternate transport protocols such as TCP are not limited to the request/response communication pattern.request/response communication pattern.

SOAP messages must be able to travel over different transport protocols SOAP messages must be able to travel over different transport protocols besides HTTP.besides HTTP.

WSE 2.0 provides support for alternate transport protocols.WSE 2.0 provides support for alternate transport protocols.

WS-Addressing applies regardless of the transport protocol.WS-Addressing applies regardless of the transport protocol.

Page 6: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

HTTP vs TCP Transport ProtocolsHTTP vs TCP Transport Protocols

Here is an example of an HTTP endpoint:Here is an example of an HTTP endpoint: http://www.bluestonepartners.com/StockTrader.asmxhttp://www.bluestonepartners.com/StockTrader.asmx

And here is an example of the equivalent TCP And here is an example of the equivalent TCP endpoint:endpoint: soap.tcp://216.70.214.118/StockTradersoap.tcp://216.70.214.118/StockTrader

The HTTP and TCP protocols have one thing in The HTTP and TCP protocols have one thing in common, which is that they both enable messaging common, which is that they both enable messaging between remote components that are running on between remote components that are running on separate processes, and on separate domains. separate processes, and on separate domains.

TCP is a lower-level protocol that operates on a port TCP is a lower-level protocol that operates on a port rather than a virtual directory, which is a higher-level rather than a virtual directory, which is a higher-level abstraction of a port.abstraction of a port.

TCP supports several communication models.TCP supports several communication models.

Page 7: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSDL OverviewWSDL Overview

Web Services Description LanguageWeb Services Description Language WS-I Basic Profile (WSDL 1.1)WS-I Basic Profile (WSDL 1.1)

WSDL documents:WSDL documents: Operations that the WS supportsOperations that the WS supports Messages that the WS exchanges Messages that the WS exchanges Data types that these messages useData types that these messages use

both intrinsic and custom both intrinsic and custom Everything is qualifiedEverything is qualified Can be generated from VS .NETCan be generated from VS .NET

Page 8: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSDL ElementsWSDL Elements

A WSDL Document contains seven primary A WSDL Document contains seven primary XML elements (+ the root <xml> element)XML elements (+ the root <xml> element)

Abstract descriptionAbstract description XML elements that document the Web service interface, XML elements that document the Web service interface,

including the methods that it supports, the input including the methods that it supports, the input parameters, and the return typesparameters, and the return types

Concrete implementationConcrete implementation XML elements that show the client how to physically bind XML elements that show the client how to physically bind

to the Web service and to use its supported operationsto the Web service and to use its supported operations

Page 9: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSDL Abstract ElementsWSDL Abstract Elements

<types /><types /> Equivalent to an XSD schema fileEquivalent to an XSD schema file

<message /><message /> describes a SOAP message, which may be an input, output or describes a SOAP message, which may be an input, output or

fault message for a Web service operationfault message for a Web service operation <operation /><operation />

Analogous to method definitions; groups associated Analogous to method definitions; groups associated messages into operationsmessages into operations

Indicates direction (one-way; notification; request/response)Indicates direction (one-way; notification; request/response)

<portType /><portType /> Abstract definition of a Web service; provided as a summary Abstract definition of a Web service; provided as a summary

of operationsof operations

Page 10: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSDL Concrete ElementsWSDL Concrete Elements

<binding /><binding /> Links an abstract Web service definition to an actual Web Links an abstract Web service definition to an actual Web

service, by associating the operation/message definitions to service, by associating the operation/message definitions to an XML namespacean XML namespace

<port /><port /> Documents the physical location (URI) of the Web serviceDocuments the physical location (URI) of the Web service

Contains a <binding /> elementContains a <binding /> element <service /><service />

Encloses one or more <port /> elementsEncloses one or more <port /> elements Provides a unified service definition of the abstract and Provides a unified service definition of the abstract and

concrete service elementsconcrete service elements

Page 11: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

<portType /><portType />

The <portType> element lists all of the operations that a The <portType> element lists all of the operations that a Web service supports.Web service supports.

The <portType> element avoids low-level details, such The <portType> element avoids low-level details, such as SOAP message details and binding information.as SOAP message details and binding information.

<portType name="StockTraderServiceSoap"><portType name="StockTraderServiceSoap"> <operation name="RequestQuote"><operation name="RequestQuote"> <input message="tns:RequestQuoteSoapIn" /><input message="tns:RequestQuoteSoapIn" /> <output message="tns:RequestQuoteSoapOut" /><output message="tns:RequestQuoteSoapOut" /> <fault message=" tns:ExceptionMessage" /><fault message=" tns:ExceptionMessage" /> </operation></operation> <operation name="PlaceTrade"><operation name="PlaceTrade"> <input message="tns:PlaceTradeSoapIn" /><input message="tns:PlaceTradeSoapIn" /> <output message="tns:PlaceTradeSoapOut" /><output message="tns:PlaceTradeSoapOut" /> </operation></operation></portType></portType>

Page 12: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WS-Addressing ConstructsWS-Addressing Constructs

Message information HeadersMessage information Headers “… “… convey end-to-end message characteristics including convey end-to-end message characteristics including

addressing for source and destination endpoints as well as addressing for source and destination endpoints as well as message identity. “message identity. “

Endpoint ReferencesEndpoint References “… “… a (referenceable) entity, processor, or resource where a (referenceable) entity, processor, or resource where

Web service messages can be targeted. “Web service messages can be targeted. “

Definitions are from the Web Services Addressing (WS-Definitions are from the Web Services Addressing (WS-Addressing) Specification, August 10, 2004Addressing) Specification, August 10, 2004

Page 13: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Message Information HeadersMessage Information Headers(001) <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" (001) <S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">(002) <S:Header>(002) <S:Header>(003) <wsa:MessageID>(003) <wsa:MessageID>(004) uuid:6B29FC40-CA47-1067-B31D-00DD010662DA(004) uuid:6B29FC40-CA47-1067-B31D-00DD010662DA(005) </wsa:MessageID>(005) </wsa:MessageID>(006) <wsa:ReplyTo>(006) <wsa:ReplyTo>(007) <wsa:Address>http://business456.example/client1</wsa:Address>(007) <wsa:Address>http://business456.example/client1</wsa:Address>(008) </wsa:ReplyTo>(008) </wsa:ReplyTo>(009) <wsa:To>http://fabrikam123.example/Purchasing</wsa:To>(009) <wsa:To>http://fabrikam123.example/Purchasing</wsa:To>(010) <wsa:Action>http://fabrikam123.example/SubmitPO</wsa:Action>(010) <wsa:Action>http://fabrikam123.example/SubmitPO</wsa:Action>(011) </S:Header>(011) </S:Header>(012) <S:Body>(012) <S:Body>(013) ...(013) ...(014) </S:Body>(014) </S:Body>(015) </S:Envelope>(015) </S:Envelope>

<wsa:To> and <wsa:Action> are the only required elements<wsa:To> and <wsa:Action> are the only required elements

Page 14: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Endpoint References IEndpoint References ISchema:Schema:

<wsa:EndpointReference><wsa:EndpointReference> <wsa:Address>xs:anyURI</wsa:Address><wsa:Address>xs:anyURI</wsa:Address> <wsa:ReferenceProperties>... </wsa:ReferenceProperties> ?<wsa:ReferenceProperties>... </wsa:ReferenceProperties> ? <wsa:ReferenceParameters>... </wsa:ReferenceParameters> ?<wsa:ReferenceParameters>... </wsa:ReferenceParameters> ? <wsa:PortType>xs:QName</wsa:PortType> ?<wsa:PortType>xs:QName</wsa:PortType> ? <wsa:ServiceName <wsa:ServiceName PortName="xs:NCName"?>xs:QName</wsa:ServiceName> ?PortName="xs:NCName"?>xs:QName</wsa:ServiceName> ? <wsp:Policy> ... </wsp:Policy>*<wsp:Policy> ... </wsp:Policy>*</wsa:EndpointReference></wsa:EndpointReference>

Example:Example:

<wsa:EndpointReference xmlns:wsa="..." xmlns:fabrikam="..."><wsa:EndpointReference xmlns:wsa="..." xmlns:fabrikam="..."> <wsa:Address>http://www.fabrikam123.example/acct</wsa:Address><wsa:Address>http://www.fabrikam123.example/acct</wsa:Address> <wsa:PortType>fabrikam:InventoryPortType</wsa:PortType><wsa:PortType>fabrikam:InventoryPortType</wsa:PortType></wsa:EndpointReference></wsa:EndpointReference>

Page 15: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Endpoint References IIEndpoint References II<wsa:EndpointReference><wsa:EndpointReference> <wsa:Address>soap.tcp://stocktrader.com/StockTrader</wsa:Address><wsa:Address>soap.tcp://stocktrader.com/StockTrader</wsa:Address> <wsa:ReferenceProperties><wsa:ReferenceProperties> <st:AccountID>123A</st:AccountID><st:AccountID>123A</st:AccountID> </wsa:ReferenceProperties></wsa:ReferenceProperties> <wsa:PortType>st:StockTraderSoap</wsa:PortType><wsa:PortType>st:StockTraderSoap</wsa:PortType> <wsp:Policy /><wsp:Policy /></wsa:EndpointReference></wsa:EndpointReference>

Endpoint “To” References are mapped into a SOAP message as Message Endpoint “To” References are mapped into a SOAP message as Message Information Headers:Information Headers:

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="..." xmlns:st="... ">xmlns:wsa="..." xmlns:st="... "> <S:Header><S:Header> ...... <wsa:To>soap.tcp://stocktrader.com/StockTrader</wsa:To><wsa:To>soap.tcp://stocktrader.com/StockTrader</wsa:To> <st:AccountID>123A</st:AccountID><st:AccountID>123A</st:AccountID></S:Header></S:Header> <S:Body><S:Body> ...... </S:Body></S:Body></S:Envelope></S:Envelope>

Page 16: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

SOAP Envelope w/ AddressingSOAP Envelope w/ Addressing<s:Envelope xmlns:s="..." xmlns:wsa="...“ xmlns:st=“…”><s:Envelope xmlns:s="..." xmlns:wsa="...“ xmlns:st=“…”> <s:Header><s:Header> <wsa:Action>http://bluestonepartners.com/StockTrader/RequestQuote</wsa:Action><wsa:Action>http://bluestonepartners.com/StockTrader/RequestQuote</wsa:Action> <wsa:To>http://bluestonepartners.com/StockTrader/StockTrader.asmx</wsa:To><wsa:To>http://bluestonepartners.com/StockTrader/StockTrader.asmx</wsa:To> <wsa:From><wsa:From> <wsa:Address>http://stockquote.com/getquote.asmx</wsa:Address><wsa:Address>http://stockquote.com/getquote.asmx</wsa:Address> <wsa:ReferenceProperties><wsa:ReferenceProperties> <st:id>647362</st:id><st:id>647362</st:id> <st:symbol>MSFT</st:symbol><st:symbol>MSFT</st:symbol> </wsa:ReferenceProperties></wsa:ReferenceProperties> </wsa:From></wsa:From> <wsa:FaultTo><wsa:FaultTo> <wsa:Address>http://stockquote.com/fault/error.asmx</wsa:Address><wsa:Address>http://stockquote.com/fault/error.asmx</wsa:Address> <wsa:ReferenceProperties><wsa:ReferenceProperties> <st:id>647362</st:id><st:id>647362</st:id> <st:symbol>MSFT</st:symbol><st:symbol>MSFT</st:symbol> </wsa:ReferenceProperties></wsa:ReferenceProperties> </wsa:FaultTo></wsa:FaultTo> </s:Header></s:Header> <s:Body xmlns:st="http://bluestonepartners.com/StockTrader"><s:Body xmlns:st="http://bluestonepartners.com/StockTrader"> <st:GetQuote>MSFT</st:GetQuote><st:GetQuote>MSFT</st:GetQuote> </s:Body></s:Body></s:Envelope></s:Envelope>

Page 17: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSE 2.0: Addressing NamespaceWSE 2.0: Addressing NamespaceClass Description

Action Specifies the XML qualified name of the operation that the SOAP message is intended for.

Address Stores a binding-specific address, and may be assigned to other classes, including To, From, and ReplyTo. The properties of the Address class correspond to classes that are based on endpoint references. For example, the Address.To property corresponds to the WS-Addressing To class, which is an endpoint reference.

AddressingHeaders Indicates the collection of properties that address a message, including To, From, ReplyTo, and MessageID.

AddressingFault Occurs when there is an invalid WS-Router header in the message, or when an exception occurs along the message path.

EndPointReference Stores endpoint reference information, which is binding information for a service.

ReferenceProperties Indicates the collection of properties that add additional description elements for an endpoint.

To Stores the source address as a URI

From Stores the destination address as an endpoint reference.

ReplyTo Stores the reply to address for the response as an endpoint reference.

Page 18: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Addressing Namespace UsageAddressing Namespace Usage

You will not often need to instance these classes directly. Instead, You will not often need to instance these classes directly. Instead, it is more likely that you will access them via properties on other it is more likely that you will access them via properties on other classes. For example, the SoapEnvelope class (in classes. For example, the SoapEnvelope class (in Microsoft.Web.Services2) provides a Context.Addressing Microsoft.Web.Services2) provides a Context.Addressing property that exposes the AddressingHeaders class. Here, you property that exposes the AddressingHeaders class. Here, you can directly set message addressing information, such as From, can directly set message addressing information, such as From, To, ReplyTo, and Action properties.To, ReplyTo, and Action properties.

The Addressing classes are independent of the underlying The Addressing classes are independent of the underlying transport protocol. It does not matter if the addressed SOAP transport protocol. It does not matter if the addressed SOAP message is transported over HTTP, TCP, or SMTP. The message is transported over HTTP, TCP, or SMTP. The addressing headers and references will apply, regardless of how addressing headers and references will apply, regardless of how the message is transported.the message is transported.

Page 19: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSE 2.0: Messaging NamespaceWSE 2.0: Messaging Namespace

Property Type Description

Envelope XmlElement The envelope is the root element of the message XML. It contains the message body and message header elements.

Body XmlElement The body element is required for all SOAP messages. It contains qualified XML for the request and response messages.

Header XmlElement The header contains optional extended information for the SOAP message. The WS-Specification settings are stored in the header.

Fault Exception Retrieves the SOAP fault from the envelope, if there is one, and returns an Exception class.

Context SoapContext The Context property enables you to modify the SOAP message contents within a custom WSE filter; or to process the SOAP message contents within a SoapReceiver processing class.

Page 20: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSE 2.0: SoapEnvelopeWSE 2.0: SoapEnvelopeSoapEnvelope message = CreateSoapMessage();SoapEnvelope message = CreateSoapMessage();Uri toUri = new Uri(Uri toUri = new Uri(http://bluestonepartners.com/StockTrader.asmx););SoapSender soapSender = new SoapSender(toUri);SoapSender soapSender = new SoapSender(toUri);soapSender.Send(message);soapSender.Send(message);

public SoapEnvelope CreateSoapMessage()public SoapEnvelope CreateSoapMessage(){{ SoapEnvelope message = new SoapEnvelope();SoapEnvelope message = new SoapEnvelope();

RequestQuote q = new RequestQuote();RequestQuote q = new RequestQuote(); RequestQuote.Symbol = "MSFT";RequestQuote.Symbol = "MSFT";

message.SetBodyObject(q);message.SetBodyObject(q);

// Assign the addressing SOAP message headers// Assign the addressing SOAP message headers message.Context.Addressing.Action = new Action(message.Context.Addressing.Action = new Action( "http://bluestonepartners.com/schemas/StockTrader/RequestQuote");"http://bluestonepartners.com/schemas/StockTrader/RequestQuote"); message.Context.Addressing.From = new From(fromUri);message.Context.Addressing.From = new From(fromUri); message.Context.Addressing.ReplyTo = new ReplyTo(fromUri);message.Context.Addressing.ReplyTo = new ReplyTo(fromUri);

return message;return message;}}

Page 21: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

Addressing and Addressing and Messaging DemosMessaging Demos

Page 22: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WS-Routing vs. WS-AddressingWS-Routing vs. WS-Addressing

Reprinted from “Moving from WS-Routing to WS-Addressing Using WSE Reprinted from “Moving from WS-Routing to WS-Addressing Using WSE 2.0” by Aaron Skonnard, MSDN: Web Services Developer Center2.0” by Aaron Skonnard, MSDN: Web Services Developer Center

Page 23: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSDL OverviewWSDL Overview

Web Services Description LanguageWeb Services Description Language WS-I Basic Profile (WSDL 1.1)WS-I Basic Profile (WSDL 1.1)

WSDL documents:WSDL documents: Operations that the WS supportsOperations that the WS supports Messages that the WS exchanges Messages that the WS exchanges Data types that these messages useData types that these messages use

both intrinsic and custom both intrinsic and custom Everything is qualifiedEverything is qualified Can be generated from VS .NETCan be generated from VS .NET

Page 24: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSDL Document StructureWSDL Document Structure

Page 25: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSE OverviewWSE Overview

Page 26: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSE SpecificationsWSE Specifications

Page 27: WS-Addressing: Enabling Transport-Neutral Message Addressing and Correlation

WSE OverviewWSE Overview WS-SecurityWS-Security: A wide-ranging specification that integrates a set of : A wide-ranging specification that integrates a set of

popular security technologies, including digital signing and popular security technologies, including digital signing and encryption based on security tokens, including X.509 certificates.encryption based on security tokens, including X.509 certificates.

WS-PolicyWS-Policy: Allows Web services to document their requirements, : Allows Web services to document their requirements, preferences and capabilities for a range of factors, though mostly preferences and capabilities for a range of factors, though mostly focused on security. For example, a Web service policy will focused on security. For example, a Web service policy will include its security requirements, such as encryption and digital include its security requirements, such as encryption and digital signing based on an X.509 certificate.signing based on an X.509 certificate.

WS-AddressingWS-Addressing: Identifies service endpoints in a message and : Identifies service endpoints in a message and allows for these endpoints to remain updated as the message is allows for these endpoints to remain updated as the message is passed along through two or more services. It largely replaces passed along through two or more services. It largely replaces the earlier WS-Routing specification.the earlier WS-Routing specification.

WS-MessagingWS-Messaging: Provides support for alternate transport channel : Provides support for alternate transport channel protocols besides HTTP, including TCP. It simplifies the protocols besides HTTP, including TCP. It simplifies the development of messaging applications, including asynchronous development of messaging applications, including asynchronous applications that communicate using SOAP over HTTP.applications that communicate using SOAP over HTTP.

WS-Secure ConversationWS-Secure Conversation: Establishes session-oriented trusted : Establishes session-oriented trusted communication sessions using security tokens.communication sessions using security tokens.

WS-Reliable MessagingWS-Reliable Messaging: Provides mechanisms to help ensure the : Provides mechanisms to help ensure the reliable delivery of messages even when one or more services in reliable delivery of messages even when one or more services in the chain are unavailable. This specification includes message the chain are unavailable. This specification includes message delivery notifications so that a sender knows whether a receiver delivery notifications so that a sender knows whether a receiver has successfully obtained a sent message.has successfully obtained a sent message.