Condividi tramite


Reliable Messaging Protocol versione 1.0

In questo argomento vengono illustrati i dettagli di implementazione di Windows Communication Foundation (WCF) per il protocollo di messaggistica WS-Reliable febbraio 2005 (versione 1.0) necessario per l'interoperabilità tramite il trasporto HTTP. WCF segue la specifica di messaggistica WS-Reliable con i vincoli e i chiarimenti illustrati in questo argomento. Si noti che il protocollo WS-ReliableMessaging versione 1.0 viene implementato a partire da WinFX.

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

Per praticità, l'argomento usa i ruoli seguenti:

  • "Iniziatore: il client che avvia la creazione della sequenza di messaggi WS-Reliable"

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

Questo documento utilizza i prefissi e i namespace nella tabella seguente.

Prefisso Namespace
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 della sequenza

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

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

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

WS-Reliable Messaggistica introduce il Offer meccanismo per stabilire le due sequenze correlate viceversa che formano una sessione.

  • R1103: se CreateSequence contiene un Offer elemento, il risponditore di messaggistica affidabile deve accettare la sequenza e rispondere con CreateSequenceResponse che contiene un wsrm:Accept elemento, formando due sequenze viceversa correlate o rifiutando la CreateSequence richiesta.

  • R1104: SequenceAcknowledgement e i messaggi dell'applicazione che passano sulla sequenza opposta devono essere inviati al riferimento dell'endpoint di ReplyToCreateSequence.

  • R1105: AcksTo e ReplyTo i riferimenti agli endpoint in CreateSequence devono avere valori di indirizzo che corrispondono a livello di byte.

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

  • R1106: AcksTo e ReplyTo i riferimenti agli endpoint in CreateSequence devono avere lo stesso set di parametri di riferimento.

    WCF non impone, ma presuppone che [parametri di riferimento] di AcksTo e ReplyTo su CreateSequence siano identici e utilizza [parametri di riferimento] dal ReplyTo riferimento dell'endpoint per riconoscimenti e messaggi di sequenza opposti.

  • R1107: Quando vengono stabilite due sequenze inverse usando il meccanismo Offer, SequenceAcknowledgement e i messaggi dell'applicazione che passano su sequenze inverse devono essere inviati al riferimento dell'endpoint ReplyTo di CreateSequence.

  • R1108: Quando vengono stabilite due sequenze inverse usando il meccanismo Offer, la proprietà [address] dell'elemento figlio Endpoint Reference wsrm:AcksTo dell'elemento wsrm:Accept di CreateSequenceResponse deve corrispondere byte per byte all'URI di destinazione dell'oggetto CreateSequence.

  • R1109: quando vengono stabilite due sequenze opposte usando il Offer meccanismo, i messaggi inviati dall'iniziatore e i riconoscimenti ai messaggi da parte del risponditore devono essere inviati allo stesso riferimento endpoint.

    WCF usa WS-Reliable Messaggistica per stabilire sessioni affidabili tra l'iniziatore e il risponditore. L'implementazione della messaggistica WS-Reliable WCF offre una sessione affidabile per modelli di messaggistica unidirezionale, request-reply e full duplex. Il meccanismo di messaggistica Offer di WS-Reliable su CreateSequence/CreateSequenceResponse consente di stabilire due sequenze viceversa correlate e fornisce un protocollo di sessione adatto per tutti gli endpoint del messaggio. Poiché WCF fornisce una garanzia di sicurezza per tale sessione, inclusa la protezione end-to-end per l'integrità della sessione, è pratico assicurarsi che i messaggi destinati alla stessa parte arrivino alla stessa destinazione. In questo modo è anche possibile eseguire il piggy-backing degli acknowledgement di sequenza nei messaggi dell'applicazione. Pertanto, i vincoli R1104, R1105 e R1108 si applicano a WCF.

Esempio di 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 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>

Sequenza

Di seguito è riportato un elenco di vincoli applicabili alle sequenze:

  • B1201:WCF genera e accede ai numeri di sequenza non superiori xs:long al valore inclusivo massimo di 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 Sequence che contiene un elemento LastMessage, purché l'URI dell'azione non sia http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage.

Un 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 usa l'header AckRequested come un meccanismo keep-alive. WCF non genera l'elemento facoltativo MessageNumber . Quando si riceve un messaggio con un'intestazione AckRequested che contiene l'elemento MessageNumber , WCF ignora il MessageNumber valore dell'elemento, come illustrato nell'esempio seguente.

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

Intestazione di Conferma della Sequenza

WCF usa un meccanismo piggy-back per i riconoscimenti di sequenze forniti nella messaggistica WS-Reliable.

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

  • B1402: quando WCF deve generare un acknowledgement prima di ricevere messaggi di sequenza ,ad esempio per soddisfare un AckRequested messaggio, WCF genera un'intestazione SequenceAcknowledgement contenente 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 dei guasti di messaggistica di WS-Reliable.

  • B1501: WCF non genera MessageNumberRollover errori.

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

  • B1503:Quando l'endpoint del servizio raggiunge il limite di connessione e non è in grado di elaborare nuove connessioni, WCF genera un codice secondario di errore aggiuntivo 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 usa WS-Addressing, l'implementazione di WCF WS-Reliable Messaging può generare errori WS-Addressing. In questa sezione vengono illustrati gli errori WS-Addressing generati in modo esplicito da WCF a livello di messaggistica WS-Reliable:

  • B1601:WCF genera l'intestazione di indirizzamento dei messaggi di errore obbligatoria quando si verifica una delle condizioni seguenti:

    • Manca un'intestazione Sequence e un'intestazione Action .

    • Al messaggio CreateSequence manca un'intestazione MessageId.

    • Al messaggio CreateSequence manca un'intestazione ReplyTo.

  • B1602:WCF genera l'azione di errore non supportata in risposta a un messaggio che manca un'intestazione Sequence e ha un'intestazione Action non riconosciuta nella specifica di messaggistica WS-Reliable.

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

La 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 Recommendations [WS-ADDR-CORE] e [WS-ADDR-SOAP].

Sebbene la specifica di WS-Reliable Messaging menzioni solo WS-Addressing 2004/08, non limita l'uso della versione WS-Addressing. Di seguito è riportato un elenco di vincoli applicabili a WCF:

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

  • R2102: Una singola versione di WS-Addressing deve essere usata in una determinata sequenza di messaggistica WS-Reliable o in una coppia di sequenze converse correlate tramite il meccanismo wsrm:Offer.

Composizione con SOAP

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

Composizione con WS-Security e WS-SecureConversation

WCF fornisce protezione per le sequenze di messaggistica WS-Reliable tramite trasporto sicuro (HTTPS), composizione con WS-Security e composizione con WS-Secure Conversazione. Di seguito è riportato un elenco di vincoli applicabili a WCF:

  • R2301:Per proteggere l'integrità di una sequenza di messaggistica WS-Reliable oltre all'integrità e alla riservatezza dei singoli messaggi, WCF richiede che sia necessario usare WS-Secure Conversazione.

  • La sessione di conversazioneAWS-Secure deve essere stabilita prima di stabilire le sequenze di messaggistica WS-Reliable.

  • R2303: se la durata della sequenza di messaggistica WS-Reliable supera la durata dell'istanza di conversazione di WS-Secure, l'oggetto SecurityContextToken creato utilizzando WS-Secure Conversazione deve essere rinnovato utilizzando l'associazione di rinnovo conversazione corrispondente WS-Secure.

  • B2304:WS-Reliable una sequenza di messaggistica o una coppia di sequenze correlate tra loro sono sempre associate a una singola sessione di WS-SecureConversation.

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

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

WS-Reliable messaggistica WS-Policy asserzione

WCF usa WS-Reliable Messaggistica WS-Policy Dichiarazione wsrm:RMAssertion per descrivere le capacità degli endpoint. Di seguito è riportato un elenco di vincoli applicabili a WCF:

  • B3001: WCF associa wsrm:RMAssertion l'asserzione WS-Policy agli elementi wsdl:binding. WCF supporta sia allegati agli elementi wsdl:binding e wsdl:port.

  • B3002: WCF supporta le seguenti proprietà facoltative dell'asserzione di messaggistica WS-Reliable e consente di controllarle su WCFReliableMessagingBindingElement.

    • wsrm:InactivityTimeout

    • wsrm:AcknowledgementInterval

    Di seguito è riportato un esempio.

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

Estensione di messaggistica di controllo del flusso WS-Reliable

WCF usa l'estendibilità alla messaggistica di WS-Reliable per fornire un controllo opzionale e più rigoroso sul flusso dei messaggi di sequenza.

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

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

  • B4002: quando è abilitato il controllo del flusso di messaggistica affidabile, WCF non richiede che un netrm:BufferRemaining elemento sia presente 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 usa netrm:BufferRemaining per indicare quanti nuovi messaggi la destinazione reliable messaging può memorizzare nel buffer.

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

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

Modelli di Scambio messaggi

In questa sezione viene descritto il comportamento di WCF quando la messaggistica WS-Reliable viene utilizzata per diversi modelli di scambio di messaggi. Per ogni modello di Scambio messaggi vengono considerati i due scenari di distribuzione seguenti:

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

  • Iniziatore indirizzabile: sia l'iniziatore che il risponditore possono ricevere richieste HTTP; in altre parole, è possibile stabilire due connessioni HTTP inverse.

Iniziatore unidirezionale non indirizzabile

Vincolo

WCF fornisce un modello di scambio di messaggi unidirezionale usando una sequenza su un canale HTTP. WCF usa le richieste HTTP per trasmettere tutti i messaggi dall'RMS all'RMD e dalla risposta HTTP per trasmettere tutti i messaggi dall'RMD all'RMS.

CreateSequence Exchange

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

Riconoscimento di Sequenza

L'iniziatore WCF elabora i riconoscimenti sulla risposta di tutti i messaggi, ad eccezione del messaggio CreateSequence e dei messaggi di errore. Il risponditore WCF genera sempre un riconoscimento autonomo nella risposta sia alla sequenza AckRequested che ai messaggi.

Messaggio di terminazione della sequenza

WCF considera TerminateSequence un'operazione unidirezionale, ovvero la risposta HTTP ha un corpo vuoto e un codice di stato HTTP 202.

Iniziatore unidirezionale indirizzabile

Vincolo

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

CreateSequence Exchange

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

Iniziatore Duplex, Indirizzabile

Vincolo

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

CreateSequence Exchange

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

La durata della sequenza

WCF considera le due sequenze come un'unica 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. Durante la lettura di un errore che genera un errore in una sequenza, WCF genera errori in entrambe le sequenze.

WCF può chiudere la sequenza in uscita e continuare a elaborare i messaggi nella sequenza in ingresso. Al contrario, WCF può elaborare la chiusura della sequenza in ingresso e continuare a inviare messaggi nella sequenza in uscita.

Iniziatore Richiesta-Risposta, Non Indirizzabile

Vincolo

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

CreateSequence Exchange

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

Messaggio unidirezionale

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

Il risponditore WCF può rispondere alla richiesta con un acknowledgement, 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 richieste sulla richiesta HTTP e riceve un messaggio di sequenza di risposta sulla risposta HTTP. La risposta deve contenere un SequenceAcknowledgement riconoscimento del messaggio della sequenza di richieste 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 della tempistica della risposta dell'applicazione, il numero di sequenza del messaggio di richiesta e il numero di sequenza della risposta non hanno alcuna correlazione.

Ripetizione di risposte

WCF si basa sulla correlazione di 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 richieste quando il messaggio della sequenza di richiesta viene riconosciuto, ma piuttosto quando la risposta HTTP contiene un acknowledgement, un messaggio utente o un errore. Il risponditore WCF ritenta le risposte nella parte della richiesta HTTP della richiesta a cui è correlata la risposta.

LastMessage Exchange

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

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

Il risponditore WCF non richiede una conferma per il messaggio finale senza contenuto della sequenza di risposta.

TerminateSequence Exchange

Quando tutte le richieste hanno ricevuto una risposta valida, l'iniziatore WCF genera e trasmette il messaggio della sequenza di richieste nella fase di TerminateSequence richiesta HTTP. WCF richiede una risposta, ma ignora il messaggio di risposta effettivo. Il componente WCF risponde ai messaggi della sequenza di richiesta TerminateSequence con i messaggi della sequenza di risposta TerminateSequence.

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

Richiesta/Risposta, Iniziatore Indirizzabile

Vincolo

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

CreateSequence Exchange

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

Correlazione richiesta/risposta

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