Protocollo Reliable Messaging versione 1.0

Questo argomento illustra i dettagli di implementazione di Windows Communication Foundation (WCF) per il protocollo WS-Reliable Messaging di febbraio 2005 (versione 1.0) necessario per l'interoperabilità con utilizzo del trasporto HTTP. WCF segue la specifica WS-Reliable Messaging con i vincoli e i chiarimenti illustrati in questo argomento. Tenere presente che il protocollo WS-ReliableMessaging versione 1.0 viene implementato a partire da WinFX.

Il protocollo WS-Reliable Messaging di febbraio 2005 viene implementato in WCF da ReliableSessionBindingElement.

Per comodità, nell'argomento vengono utilizzati i ruoli seguenti:

  • Iniziatore: il client che avvia la creazione della sequenza di WS-Reliable Message.

  • Risponditore: il servizio che riceve le richieste dell'iniziatore.

In questo documento vengono utilizzati i prefissi e gli spazi dei nomi riportati nella tabella seguente.

Prefisso Spazio dei nomi
wsrm http://schemas.xmlsoap.org/ws/2005/02/rm
netrm http://schemas.microsoft.com/ws/2006/05/rm
s http://www.w3.org/2003/05/soap-envelope
wsa http://schemas.xmlsoap.org/ws/2005/08/addressing
wsse http://docs.oasis-open.org/wss/2004/01/oasis-200401-wssecurity-secext-1.0.xsd

Messaggistica

Messaggi di definizione sequenza

WCF implementa i messaggi CreateSequence e CreateSequenceResponse per stabilire una sequenza di messaggi affidabile. Si applicano i vincoli seguenti:

  • B1101: l'iniziatore WCF non genera l'elemento facoltativo Expires nel messaggio CreateSequence o, nei casi in cui il messaggio CreateSequence contiene un elemento Offer, l'elemento Expires facoltativo nell'elemento Offer.

  • B1102: quando si accede al messaggio CreateSequence, il WCFResponder invia e riceve entrambi gli elementi Expires, se esistenti, ma non ne usa i valori.

Con il protocollo WS-ReliableMessaging viene introdotto il meccanismo Offer che consente di stabilire le due sequenze correlate opposte che formano una sessione.

  • R1103: se CreateSequence contiene un elemento Offer, il risponditore Reliable Messaging deve accettare la sequenza e rispondere con CreateSequenceResponse contenente un elemento wsrm:Accept, formando due sequenze correlate opposte, oppure rifiutare la richiesta CreateSequence.

  • R1104: i messaggi SequenceAcknowledgement e dell'applicazione in transito sulla sequenza opposta devono essere inviati al riferimento endpoint ReplyTo di CreateSequence.

  • R1105: i riferimenti endpoint AcksTo e ReplyTo in CreateSequence devono presentare valori indirizzo che corrispondano all'ottetto.

    Il risponditore WCF verifica che la parte URI degli EPR AcksTo e ReplyTo sia identica prima di creare una sequenza.

  • R1106: i riferimenti endpoint AcksToe ReplyTo in CreateSequence devono avere lo stesso set di parametri per riferimento.

    WCF non applica ma presuppone che [parametri di riferimento] di AcksTo e ReplyTo su CreateSequence siano identici e usa [parametri di riferimento] del riferimento dell'endpoint ReplyTo per i riconoscimenti e i messaggi di sequenza inversa.

  • R1107: quando vengono stabilite due sequenze opposte tramite il meccanismo Offer, i messaggi dell'applicazione e SequenceAcknowledgement in transito sulle sequenze opposte devono essere inviati al riferimento all'endpoint ReplyTo di CreateSequence.

  • R1108: quando vengono stabilite due sequenze opposte mediante il meccanismo Offer, la proprietà [address] dell'elemento figlio del riferimento endpoint wsrm:AcksTo dell'elemento wsrm:Accept di CreateSequenceResponse deve corrispondere per numero di byte all'URI di destinazione di CreateSequence.

  • R1109: quando vengono stabilite due sequenze opposte tramite il meccanismo Offer, i messaggi inviati dall'iniziatore e gli acknowledgement a tali messaggi da parte del risponditore devono essere inviati allo stesso riferimento all'endpoint.

    WCF utilizza WS-Reliable Messaging per stabilire sessioni affidabili tra l'iniziatore e il risponditore. L'implementazione di WS-Reliable Messaging di WCF offre una sessione affidabile per modelli di messaggistica unidirezionale, richiesta-risposta e full duplex. Il meccanismo Offer di WS-Reliable Messaging su CreateSequence/CreateSequenceResponse consente di stabilire due sequenze inverse correlate e offre un protocollo di sessione adatto a tutti gli endpoint dei messaggi. Poiché WCF fornisce una garanzia di sicurezza per tale sessione, inclusa la protezione end-to-end per l'integrità della sessione stessa, è opportuno garantire che i messaggi destinati alla stessa entità arrivino alla stessa destinazione. Ciò consente anche il "piggy-backing" degli acknowledgement della sequenza sui messaggi dell'applicazione. A WCF si applicano pertanto i vincoli R1104, R1105 e R1108.

Esempio di un messaggio CreateSequence.

<s:Envelope>
  <s:Header>
    <a:Action s:mustUnderstand="1">
      http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence
    </a:Action>
    <a:ReplyTo>
      <a:Address>
         http://Business456.com/clientA
      </a:Address>
    </a:ReplyTo>
    <a:MessageID>
      urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
    </a:MessageID>
    <a:To s:mustUnderstand="1">
      http://Business456.com/clientA
    </a:To>
  </s:Header>
  <s:Body>
    <wsrm:CreateSequence>
      <wsrm:AcksTo>
       <wsa:Address>
         http://Business456.com/clientA
       </wsa:Address>
     </wsrm:AcksTo>
     <wsrm:Offer>
      <wsrm:Identifier>
        urn:uuid:0afb8d36-bf26-4776-b8cf-8c91fddb5496
      </wsrm:Identifier>
     </wsrm:Offer>
   </wsrm:CreateSequence>
  </s:Body>
</s:Envelope>

Esempio di un messaggio CreateSequenceResponse.

<s:Envelope>
  <s:Header>
    <a:Action s:mustUnderstand="1">
      http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse
    </a:Action>
    <a:RelatesTo>
      urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
    </a:RelatesTo>
    <a:To s:mustUnderstand="1">
      http://Business456.com/clientA
    </a:To>
  </s:Header>
  <s:Body>
   <wsrm:CreateSequenceResponse>
    <Identifier>
     urn:uuid:eea0a36c-b38a-43e8-8c76-2fabe2d76386
    </Identifier>
    <Accept>
    <AcksTo>
      <a:Address>
        http://BusinessABC.com/serviceA
      </a:Address>
    </AcksTo>
    </Accept>
   </wsrm:CreateSequenceResponse>
  </s:Body>
</s:Envelope>

Sequence

Di seguito è riportato un elenco di vincoli che si applicano alle sequenze:

  • B1201: WCF genera e accede a numeri di sequenza non superiori al valore inclusivo massimo di xs:long, 9223372036854775807.

  • B1202: WCF genera sempre un ultimo messaggio con corpo vuoto con l'URI dell'azione di http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage.

  • B1203: WCF riceve e recapita un messaggio con un'intestazione di sequenza che contiene un elemento LastMessage purché l'URI dell'azione non sia http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage.

Esempio di intestazione di sequenza.

<wsrm:Sequence>
  <wsrm:Identifier>
    urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
  </wsrm:Identifier>
  <wsrm:MessageNumber>
    10
  </wsrm:MessageNumber>
  <wsrm:LastMessage/>
 </wsrm:Sequence>

Intestazione AckRequested

WCF utilizza l'intestazioneAckRequested come meccanismo keep-alive. WCF non genera l'elemento MessageNumber facoltativo. Quando si riceve un messaggio con un'intestazione AckRequested che contiene l'elemento MessageNumber, WCF ignora il valore MessageNumber dell'elemento, come illustrato nell'esempio seguente.

<wsrm:AckRequested>
  <wsrm:Identifier>
    urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
  </wsrm:Identifier>
</wsrm:AckRequested>

Intestazione SequenceAcknowledgement

WCF utilizza il meccanismo piggy-back per i riconoscimenti della sequenza forniti in WS-Reliable Messaging.

  • R1401: quando vengono stabilite due sequenze opposte utilizzando il meccanismo Offer, l'intestazione SequenceAcknowledgement può essere inclusa in qualsiasi messaggio dell'applicazione trasmesso al destinatario desiderato.

  • B1402: quando WCF deve generare un riconoscimento prima di ricevere qualsiasi messaggio di sequenza (ad esempio, per soddisfare un messaggio AckRequested), WCF genera un'intestazione SequenceAcknowledgement che contiene l'intervallo 0-0, come illustrato nell'esempio seguente.

    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>
        urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
      </wsrm:Identifier>
      <wsrm:AcknowledgementRange Upper="0" Lower="0"/>
    </wsrm:SequenceAcknowledgement>
    
  • B1403: WCF non genera intestazioni SequenceAcknowledgement che contengono un elemento Nack ma supporta elementi Nack.

Errori WS-ReliableMessaging

Di seguito è riportato un elenco di vincoli che si applicano all'implementazione WCF degli errori di WS-Reliable Messaging:

  • B1501: WCF non genera errori MessageNumberRollover.

  • B1502: l'endpoint WCF può generare errori CreateSequenceRefused come descritto nella specifica.

  • B1503: quando l'endpoint di servizio raggiunge il limite di connessione e non è in grado di elaborare nuove connessioni, WCF genera un sottocodice aggiuntivo dell'errore CreateSequenceRefused, netrm:ConnectionLimitReached, come illustrato nell'esempio seguente.

    <s:Envelope>
      <s:Header>
        <wsa:Action>
          http://schemas.xmlsoap.org/ws/2005/08/addressing/fault
        </wsa:Action>
      </s:Header>
      <s:Body>
        <s:Fault>
          <s:Code>
            <s:Value>
              s:Receiver
            </s:Value>
            <s:Subcode>
              <s:Value>
                wsrm:CreateSequenceRefused
              </s:Value>
              <s:Subcode>
                <s:Value>
                  netrm:ConnectionLimitReached
                </s:Value>
              </s:Subcode>
            </s:Subcode>
          </s:Code>
          <s:Reason>
            <s:Text xml:lang="en">
              [Reason]
            </s:Text>
          </s:Reason>
        </s:Fault>
      </s:Body>
    </s:Envelope>
    

Errori WS-Addressing

Poiché WS-Reliable Messaging utilizza WS-Addressing, l'implementazione di WCF WS-Reliable Messaging può generare errori WS-Addressing. Questa sezione tratta gli errori WS-Addressing generati in modo esplicito da WCF a livello di WS-Reliable Messaging:

  • B1601: WCF genera l'errore Intestazione di indirizzamento messaggi richiesta quando si verifica una delle condizioni seguenti:

    • In un messaggio mancano un'intestazione Sequence e un'intestazione Action.

    • In un messaggio CreateSequence manca un'intestazione MessageId.

    • In un messaggio CreateSequence manca un'intestazione ReplyTo.

  • B1602: WCF genera l'errore Azione non supportata in risposta a un messaggio in cui manca un'intestazione Sequence e presenta un'intestazione Action che non è riconosciuta nella specifica WS-Reliable Messaging.

  • B1603: WCF genera l'errore Endpoint non disponibile per indicare che l'endpoint non elabora la sequenza in base all'esame delle intestazioni di indirizzamento del messaggio CreateSequence.

Composizione del protocollo

Composizione con WS-Addressing

WCF supporta due versioni di WS-Addressing: WS-Addressing 2004/08 [WS-ADDR] e W3C WS-Addressing 1.0 Elementi consigliati [WS-ADDR-CORE] e [WS-ADDR-SOAP].

Anche se la specifica WS-Reliable Messaging menziona solo WS-Addressing 2004/08, non limita la versione WS-Addressing da utilizzare. Di seguito è riportato un elenco di vincoli che si applicano a WCF:

  • R2101: sia WS-Addressing 2004/08 che WS-Addressing 1.0 possono essere utilizzati con WS-Reliable Messaging.

  • R2102: è necessario utilizzare una singola versione di WS-Addressing in una determinata sequenza di WS-Reliable Messaging o in una coppia di sequenze inverse correlate utilizzando il meccanismo wsrm:Offer.

Composizione con SOAP

WCF supporta l'uso di SOAP 1.1 e SOAP 1.2 con WS-Reliable Messaging.

Composizione con WS-Security e WS-SecureConversation

WCF fornisce protezione per le sequenze di WS-Reliable Messaging utilizzando trasporto sicuro (HTTPS), composizione con WS-Security e composizione con WS-Secure Conversation. Di seguito è riportato un elenco di vincoli che si applicano a WCF:

  • R2301: per proteggere l'integrità di una sequenza di WS-Reliable Messaging oltre all'integrità e alla riservatezza dei singoli messaggi, WCF richiede l'utilizzo di WS-Secure Conversation.

  • R2302: prima di stabilire sequenze di WS-Reliable Messaging, è necessario stabilire una sessione WS-SecureConversation.

  • R2303: se la durata della sequenza di WS-Reliable Messaging supera la durata della sessione WS-SecureConversation, è necessario rinnovare il SecurityContextToken stabilito tramite WS-SecureConversation utilizzando l'associazione WS-Secure Conversation Renewal corrispondente.

  • B2304: la sequenza di WS-Reliable Messaging o una coppia di sequenze inverse correlate sono sempre associate a una singola sessione WS-SecureConversation.

    L'origine WCF genera l'elemento wsse:SecurityTokenReference nella sezione di estendibilità dell'elemento del messaggio CreateSequence.

  • R2305: se composto con WS-Secure Conversation, un messaggio CreateSequence deve contenere l'elemento wsse:SecurityTokenReference.

Asserzione di WS-Policy relativa a WS-Reliable Messaging

WCF usa la WS-Policy Assertion wsrm:RMAssertion di WS-Reliable Messaging per descrivere le funzionalità degli endpoint. Di seguito è riportato un elenco di vincoli che si applicano a WCF:

  • B3001: WCF allega la WS-Policy Assertion wsrm:RMAssertion agli elementi wsdl:binding. WCF supporta sia gli allegati a wsdl:binding che gli elementi wsdl:port.

  • B3002: WCF supporta le seguenti proprietà facoltative dell'asserzione WS-Reliable Messaging e ne fornisce il controllo sul WCFReliableMessagingBindingElement:

    • wsrm:InactivityTimeout

    • wsrm:AcknowledgementInterval

    Di seguito viene riportato un esempio.

    <wsrm:RMAssertion>
      <wsrm:InactivityTimeout Milliseconds="600000" />
      <wsrm:AcknowledgementInterval Milliseconds="200" />
    </wsrm:RMAssertion>
    

Estensione di WS-Reliable Messaging per il controllo del flusso

WCF utilizza l'estendibilità di WS-Reliable Messaging per fornire un controllo aggiuntivo facoltativo più rigoroso sul flusso di messaggi della sequenza.

Il controllo del flusso è abilitato impostando la proprietà ReliableSessionBindingElement.FlowControlEnabled su true. Di seguito è riportato un elenco di vincoli che si applicano a WCF:

  • B4001: quando il controllo del flusso di Reliable Messaging è abilitato, WCF genera un elemento netrm:BufferRemaining nell'estendibilità dell'elemento dell'intestazione SequenceAcknowledgement.

  • B4002: quando il controllo del flusso di Reliable Messaging è abilitato, WCF non richiede la presenza di un elemento netrm:BufferRemaining nell'intestazione SequenceAcknowledgement, come illustrato nell'esempio seguente.

    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>
        http://fabrikam123.com/abc
      </wsrm:Identifier>
      <wsrm:AcknowledgementRange Upper="1" Lower="1"/>
      <netrm:BufferRemaining>
        8
      </netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    
  • B4003: WCF utilizza netrm:BufferRemaining per indicare quanti nuovi messaggi la destinazione di Reliable Messaging può memorizzare nel buffer.

  • B4004: il servizio WCF Reliable Messaging limita il numero di messaggi trasmessi quando l'applicazione di destinazione di Reliable Messaging non può ricevere messaggi rapidamente. La destinazione Reliable Messaging memorizza nel buffer messaggi e il valore dell'elemento scende a 0.

  • B4005: WCF genera valori interi netrm:BufferRemaining compresi tra 0 e 4096 inclusi e legge valori interi compresi tra 0 e il valore maxInclusive di xs:int, incluso 214748364.

Modelli di scambio dei messaggi

In questa sezione viene descritto il comportamento di WCF quando WS-Reliable Messaging viene utilizzato per diversi modelli di scambio di messaggi. Per ogni modello di scambio di messaggi, vengono presi in considerazione i due scenari di distribuzione seguenti:

  • Iniziatore non indirizzabile: l'iniziatore si trova dietro a un firewall; il risponditore può recapitare messaggi all'iniziatore solo su risposte HTTP.

  • Iniziatore indirizzabile: le richieste HTTP possono essere inviate sia all'iniziatore che al risponditore. In altre parole, è possibile stabilire due connessioni HTTP opposte.

Iniziatore unidirezionale, non indirizzabile

Binding

WCF fornisce un modello di scambio di messaggi unidirezionale utilizzando una sequenza su un canale HTTP. WCF utilizza le richieste HTTP per trasmettere tutti i messaggi da RMS a RMD e la risposta HTTP per trasmettere tutti i messaggi da RMD a RMS.

Scambio CreateSequence

L'iniziatore WCF genera un messaggio CreateSequence senza offerta. Il risponditore WCF garantisce che CreateSequence non abbia offerte prima di creare una sequenza. Il risponditore WCF risponde alla richiesta CreateSequence con un messaggio CreateSequenceResponse.

SequenceAcknowledgement

L'iniziatore WCF elabora i riconoscimenti sulla risposta di tutti i messaggi tranne il messaggio CreateSequence e i messaggi di errore. Il risponditore WCF genera sempre un riconoscimento indipendente nella risposta sia ai messaggi di sequenza che a quelli AckRequested.

Messaggio TerminateSequence

WCF tratta TerminateSequence come operazione unidirezionale, il che significa che la risposta HTTP ha un corpo vuoto e un codice di stato HTTP 202.

Iniziatore unidirezionale, indirizzabile

Binding

WCF fornisce un modello di scambio di messaggi unidirezionale usando una sequenza su un canale HTTP in entrata e su uno in uscita. WCF utilizza le richieste HTTP per trasmettere tutti i messaggi. Tutte le risposte HTTP hanno un corpo vuoto e un codice di stato HTTP 202.

Scambio CreateSequence

L'iniziatore WCF genera un messaggio CreateSequence senza offerta. Il risponditore WCF garantisce che CreateSequence non abbia offerte prima di creare una sequenza. Il risponditore WCF trasmette il messaggio CreateSequenceResponse su una richiesta HTTP indirizzata con il riferimento dell'endpoint ReplyTo.

Iniziatore duplex, indirizzabile

Binding

WCF fornisce un modello di scambio di messaggi bidirezionale completamente asincrono usando due sequenze su un canale HTTP in entrata e su uno in uscita. WCF utilizza le richieste HTTP per trasmettere tutti i messaggi. Tutte le risposte HTTP hanno un corpo vuoto e un codice di stato HTTP 202.

Scambio CreateSequence

L'iniziatore WCF genera un messaggio CreateSequence con un'offerta. Il risponditore WCF garantisce che CreateSequence abbia un'offerta prima di creare una sequenza. WCF invia CreateSequenceResponse sulla richiesta HTTP indirizzata al riferimento dell'endpoint ReplyTo di CreateSequence.

Durata della sequenza

WCF tratta le due sequenze come una sessione completamente duplex.

Quando si genera un errore che genera un errore in una sequenza, WCF prevede che l'endpoint remoto generi errori in entrambe le sequenze. Dopo la lettura di un errore che genera un errore in una sequenza, WCF genera errori in entrambe le sequenze.

WCF può chiudere la sua sequenza in uscita e continuare a elaborare i messaggi nella sua sequenza in entrata. Per contro, WCF può elaborare la chiusura della sequenza in entrata e continuare a inviare messaggi nella sua sequenza in uscita.

Iniziatore request/reply non indirizzabile

Binding

WCF fornisce un modello di scambio di messaggi unidirezionale e richiesta-risposta usando due sequenze su un canale HTTP. WCF utilizza le richieste HTTP per trasmettere i messaggi della sequenza di richiesta e utilizza le risposte HTTP per trasmettere i messaggi della sequenza di risposta.

Scambio CreateSequence

L'iniziatore WCF genera un messaggio CreateSequence con un'offerta. Il risponditore WCF garantisce che CreateSequence abbia un'offerta prima di creare una sequenza. Il risponditore WCF risponde alla richiesta CreateSequence con un messaggio CreateSequenceResponse.

Messaggio unidirezionale

Per completare correttamente un protocollo di scambio di messaggi unidirezionale, l'iniziatore WCF trasmette un messaggio di sequenza di richiesta sulla richiesta HTTP e riceve un messaggio indipendente SequenceAcknowledgement sulla risposta HTTP. SequenceAcknowledgement deve riconoscere il messaggio trasmesso.

Il risponditore WCF può rispondere alla richiesta con un riconoscimento, un errore o una risposta con un corpo vuoto e un codice di stato HTTP 202.

Messaggi bidirezionali

Per completare correttamente un protocollo di scambio di messaggi bidirezionale, l'iniziatore WCF trasmette un messaggio di sequenza di richiesta sulla richiesta HTTP e riceve un messaggio di sequenza di risposta sulla risposta HTTP. La risposta deve contenere un SequenceAcknowledgement che riconosce che il messaggio della sequenza di richiesta è stato trasmesso.

Il risponditore WCF può rispondere alla richiesta con una risposta dell'applicazione, un errore o una risposta con un corpo vuoto e un codice di stato HTTP 202.

A causa della presenza di messaggi unidirezionali e del tempo delle risposte dell'applicazione, il numero di sequenza del messaggio della sequenza di richiesta e il numero di sequenza del messaggio di risposta non hanno alcuna correlazione.

Nuovi tentativi di risposte

WCF si basa sulla correlazione richiesta/risposta HTTP per la correlazione del protocollo di scambio di messaggi bidirezionale. Per questo motivo, l'iniziatore WCF non smette di ripetere un messaggio di sequenza di richiesta quando il messaggio di sequenza di richiesta viene riconosciuto, ma piuttosto quando la risposta HTTP contiene un riconoscimento, un messaggio utente o un errore. Il risponditore WCF ritenta le risposte sulla parte di richiesta HTTP della richiesta a cui è correlata la risposta.

Scambio LastMessage

L'iniziatore WCF genera e trasmette un ultimo messaggio a corpo vuoto sulla parte di richiesta HTTP. WCF richiede una risposta ma ignora il messaggio di risposta effettivo. Il risponditore WCF risponde all'ultimo messaggio con corpo vuoto di sequenza di richiesta con l'ultimo messaggio con corpo vuoto di sequenza di risposta.

Se il risponditore WCF riceve un ultimo messaggio in cui l'URI dell'azione non è http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage, WCF risponde con un ultimo messaggio. Nel caso di un protocollo di scambio di messaggi bidirezionale, l'ultimo messaggio contiene il messaggio dell'applicazione; nel caso, invece, di un protocollo di scambio di messaggi unidirezionale, l'ultimo messaggio è vuoto.

Il risponditore WCF non richiede un riconoscimento per l'ultimo messaggio con corpo vuoto di sequenza di risposta.

Scambio TerminateSequence

Quando tutte le richieste hanno ricevuto una risposta valida, l'iniziatore WCF genera e trasmette il messaggio di sequenza di richiesta TerminateSequence sulla parte di richiesta HTTP. WCF richiede una risposta ma ignora il messaggio di risposta effettivo. Il risponditore WCF risponde al messaggio di sequenza di richiesta TerminateSequence con il messaggio di sequenza di risposta TerminateSequence.

In una sequenza di arresto normale, entrambi i messaggi TerminateSequence contengono un intervallo completo SequenceAcknowledgement.

Iniziatore request/reply, indirizzabile

Binding

WCF fornisce un modello di scambio di messaggi di richiesta-risposta usando due sequenze su un canale HTTP in entrata e su uno in uscita. WCF utilizza le richieste HTTP per trasmettere tutti i messaggi. Tutte le risposte HTTP hanno un corpo vuoto e un codice di stato HTTP 202.

Scambio CreateSequence

L'iniziatore WCF genera un messaggio CreateSequence con un'offerta. Il risponditore WCF garantisce che CreateSequence abbia un'offerta prima di creare una sequenza. WCF invia CreateSequenceResponse sulla richiesta HTTP indirizzata al riferimento dell'endpoint ReplyTo di CreateSequence.

Correlazione request/reply

L'iniziatore WCF garantisce che tutti i messaggi di richiesta dell'applicazione presentino un MessageId e un riferimento dell'endpoint ReplyTo. L'iniziatore WCF applica il riferimento dell'endpoint ReplyTo del messaggio CreateSequence su ogni messaggio di richiesta dell'applicazione. Il risponditore WCF richiede che i messaggi di richiesta in entrata presentino un MessageId e un ReplyTo. Il risponditore WCF garantisce che l'URI di riferimento dell'endpoint sia di CreateSequence che di tutti i messaggi di richiesta dell'applicazione siano identici.