Sdílet prostřednictvím


Protokol spolehlivého zasílání zpráv verze 1.1

Toto téma se věnuje podrobnostem implementace technologie Windows Communication Foundation (WCF) pro protokol WS-ReliableMessaging února 2007 (verze 1.1), který je nezbytný pro spolupráci pomocí přenosu HTTP. WCF se řídí specifikací WS-ReliableMessaging s omezeními a vysvětleními vysvětlenými v tomto tématu. Všimněte si, že protokol WS-ReliableMessaging verze 1.1 je implementovaný od rozhraní .NET Framework 3.5.

Protokol z února 2007 WS-ReliableMessaging je implementován v WCF ReliableSessionBindingElement.

Pro usnadnění používání tématu se používají následující role:

  • Iniciátor: Klient, který zahajuje vytvoření sekvence zpráv WS-Reliable.

  • Respondér: Služba, která přijímá žádosti iniciátora.

Tento dokument používá předpony a obory názvů v následující tabulce.

Předpona Namespace
wsrm http://docs.oasis-open.org/ws-rx/wsrm/200702
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
wsrmp http://docs.oasis-open.org/ws-rx/wsrmp/200702
netrmp http://schemas.microsoft.com/ws-rx/wsrmp/200702
Wsp (WS-Policy 1.2 nebo WS-Policy 1.5)

Odesílání zpráv

Vytvoření sekvence

WCF implementuje CreateSequence a CreateSequenceResponse zprávy pro vytvoření spolehlivé sekvence zasílání zpráv. Platí následující omezení:

  • B1101: Iniciátor WCF používá stejný odkaz na koncový bod jako CreateSequence zprávy, ReplyTo, AcksTo a Offer/Endpoint.

  • R1102: Odkazy na koncové body AcksTo, ReplyTo a Offer/Endpoint ve zprávě CreateSequence musí mít adresní hodnoty, jejichž řetězcové reprezentace jsou identické, aby odpovídaly na úrovni oktetů.

    • Respondér WCF ověřuje, že část URI v odkazech AcksTo, ReplyTo a Endpoint na koncové body je před vytvořením sekvence stejná.
  • R1103: Odkazy na koncové body AcksTo, ReplyTo a Offer/Endpoint ve zprávě CreateSequence by měly mít stejnou sadu parametrů odkazu.

    • WCF nevynucuje, ale předpokládá, že referenční parametry v referencích na koncové body AcksTo, ReplyTo a Offer/Endpoint na CreateSequence jsou identické a používá referenční parametry z odkazu na koncový bod ReplyTo pro potvrzení a sekvenční zprávy opačného směru.
  • B1104: Iniciátor WCF negeneruje volitelný element Expires nebo Offer/Expires ve zprávě CreateSequence.

  • B1105: Při přístupu ke CreateSequence zprávě používá respondér WCF hodnotu Expires v elementu CreateSequence jako hodnotu Expires v elementu CreateSequenceResponse. V opačném případě respondér WCF přečte a ignoruje hodnoty Expires a Offer/Expires.

  • B1106: Při přístupu ke CreateSequenceResponse zprávě přečte iniciátor WCF volitelnou Expires hodnotu, ale nepoužívá ji.

  • B1107: Iniciátor WCF a respondér vždy vygenerují volitelný IncompleteSequenceBehavior prvek v prvcích CreateSequence/Offer a CreateSequenceResponse.

  • B1108: WCF používá pouze hodnoty DiscardFollowingFirstGap a NoDiscard v elementu IncompleteSequenceBehavior.

    • WS-ReliableMessaging využívá Offer mechanismus k vytvoření dvou opačně korelovaných sekvencí, které tvoří relaci.
  • B1109: Pokud CreateSequence obsahuje Offer prvek, jedním ze způsobů, jak respondér WCF odmítne nabízenou sekvenci, je odpověď s CreateSequenceResponse, ale bez Accept prvku.

  • B1110: Pokud odpovídač spolehlivého zasílání zpráv odmítne nabízenou sekvenci, iniciátor WCF naruší nově vytvořenou sekvenci.

  • B1111: Pokud CreateSequence neobsahuje Offer prvek, obousměrný respondér WCF odmítne nabízenou sekvenci reagováním s chybou CreateSequenceRefused .

  • R1112: Při vytvoření dvou opačných sekvencí pomocí Offer mechanismu, [address] vlastnost CreateSequenceResponse/Accept/AcksTo odkazu na koncový bod musí odpovídat cílové URI adrese CreateSequence zprávy bajt pro bajt.

  • R1113: Při vytvoření dvou opačných sekvencí pomocí Offer mechanismu musí být všechna zprávy proudící z iniciátoru do respondéra v obou sekvencích odeslána na stejný odkaz na koncový bod.

WCF používá WS-ReliableMessaging k vytvoření spolehlivých relací mezi iniciátorem a respondérem. Implementace WCF WS-ReliableMessaging poskytuje spolehlivou relaci pro jednosměrnou komunikaci, vzory požadavek-odpověď a plně duplexní vzory zasílání zpráv. Mechanismus WS-ReliableMessaging Offer na CreateSequence a CreateSequenceResponse umožňuje vytvořit dvě korelované konverzační sekvence a poskytuje protokol sezení, který je vhodný pro všechny koncové body zpráv. Vzhledem k tomu, že WCF poskytuje záruku zabezpečení pro takovou relaci, včetně kompletní ochrany pro integritu relace, je vhodné zajistit, aby zprávy určené pro stejnou stranu dorazily do stejného cíle. To také umožňuje připojování potvrzení sekvencí k aplikačním zprávám. Omezení R1102, R1112 a R1113 se proto vztahují na WCF.

Příklad CreateSequence zprávy

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequence</wsa:Action>
    <wsa:MessageID>urn:uuid:949cca61-8813-42ff-ab33-18d9e3fa82fa</wsa:MessageID>
    <wsa:ReplyTo>
        <wsa:Address>http://Business456.com/clientA</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To s:mustUnderstand="1">http://BusinessABC.com/serviceA</wsa: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:066b4730-fc82-458a-a5c1-210be4fb4e4e</wsrm:Identifier>
        <wsrm:Endpoint>
          <wsa:Address>http://Business456.com/clientA</wsa:Address>
        </wsrm:Endpoint>
        <wsrm:IncompleteSequenceBehavior>DiscardFollowingFirstGap</wsrm:IncompleteSequenceBehavior>
      </wsrm:Offer>
    </wsrm:CreateSequence>
  </s:Body>
</s:Envelope>

Příklad CreateSequenceResponse zprávy

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CreateSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:949cca61-8813-42ff-ab33-18d9e3fa82fa</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">http://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CreateSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:IncompleteSequenceBehavior>DiscardFollowingFirstGap</wsrm:IncompleteSequenceBehavior>
      <wsrm:Accept>
        <wsrm:AcksTo>
          <wsa:Address>http://BusinessABC.com/serviceA</wsa:Address>
        </wsrm:AcksTo>
      </wsrm:Accept>
    </wsrm:CreateSequenceResponse>
  </s:Body>
</s:Envelope>

Zavření sekvence

WCF používá CloseSequence a CloseSequenceResponse zprávy pro vypnutí iniciované zdrojem spolehlivého zasílání zpráv. Cíl spolehlivé zasílání zpráv WCF neinicializuje vypnutí a zdroj spolehlivé zasílání zpráv WCF nepodporuje vypnutí iniciované cílem spolehlivé zasílání zpráv. Platí následující omezení:

  • B1201: Zdroj spolehlivého zasílání zpráv WCF vždy odešle CloseSequence zprávu pro vypnutí sekvence.

  • B1202: Zdroj spolehlivého zasílání zpráv čeká na potvrzení úplné sekvence zpráv, než bude odeslána zpráva CloseSequence.

  • B1203: Zdroj spolehlivého zasílání zpráv vždy obsahuje volitelný LastMsgNumber prvek, pokud sekvence neobsahuje zprávy.

  • R1204: Cíl spolehlivého zasílání zpráv nesmí zahájit vypnutí odesláním zprávy CloseSequence.

  • B1205: Při přijetí zprávy zdroj spolehlivého CloseSequence zasílání zpráv WCF považuje sekvenci neúplnou a odešle chybu.

Příklad CloseSequence zprávy

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequence</wsa:Action>
    <wsa:MessageID>urn:uuid:6ce1d4c3-e1c1-474f-a8c9-4210e37f7877</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://Business456.com/clientA</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To s:mustUnderstand="1">http://BusinessABC.com/serviceA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CloseSequence>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:LastMsgNumber>30</wsrm:LastMsgNumber>
    </wsrm:CloseSequence>
  </s:Body>
</s:Envelope>

Příklad CloseSequenceResponse zprávy:

<s:Envelope>
  <s:Header>
    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Lower="1" Upper="30"></wsrm:AcknowledgementRange>
      <wsrm:Final></wsrm:Final>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/CloseSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:6ce1d4c3-e1c1-474f-a8c9-4210e37f7877</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">http://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:CloseSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
    </wsrm:CloseSequenceResponse>
  </s:Body>
</s:Envelope>

Ukončení sekvence

WCF primárně používá TerminateSequence/TerminateSequenceResponse handshake po dokončení CloseSequence/CloseSequenceResponse handshake. Cíl spolehlivého zasílání zpráv WCF neskoniciuje ukončení a zdroj spolehlivého zasílání zpráv nepodporuje ukončení iniciované cílem spolehlivého zasílání zpráv. Platí následující omezení:

  • B1301: Iniciátor WCF odešle TerminateSequence zprávu pouze po úspěšném uskutečnění CloseSequence/CloseSequenceResponse handshake.

  • R1302: WCF ověřuje, že prvek LastMsgNumber je konzistentní ve všech zprávách CloseSequence a TerminateSequence pro danou sekvenci. To znamená, že LastMsgNumber buď není k dispozici ve všech CloseSequence a TerminateSequence zprávách, nebo je přítomna a identická u všech CloseSequence a TerminateSequence zpráv.

  • B1303: Při přijetí TerminateSequence zprávy po CloseSequence/CloseSequenceResponse handshake odpoví spolehlivý příjemce zpráv zprávou TerminateSequenceResponse. Vzhledem k tomu, že zdroj spolehlivého zasílání zpráv má konečné potvrzení před odesláním TerminateSequence zprávy, cíl spolehlivého zasílání zpráv bez pochyby ví, že sekvence končí, a okamžitě uvolní prostředky.

  • B1304: Když je přijata zpráva TerminateSequence před handshake CloseSequence/CloseSequenceResponse, cíl spolehlivého zasílání zpráv WCF odpoví zprávou TerminateSequenceResponse. Pokud cíl spolehlivého zasílání zpráv určuje, že v sekvenci nejsou žádné nekonzistence, cíl spolehlivého zasílání zpráv čeká na dobu určenou cílem aplikace před uvolněním prostředků, aby klient mohl získat konečné potvrzení. V opačném případě cíl Spolehlivého zasílání zpráv uvolní prostředky okamžitě a indikuje cílové aplikaci, že posloupnost končí pochybnostmi vyvoláním Faulted události.

Příklad TerminateSequence zprávy

<s:Envelope>
  <s:Header>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequence</wsa:Action>
    <wsa:MessageID>urn:uuid:3597a398-4f3c-40f4-9335-8f1515572fdf</wsa:MessageID>
    <wsa:ReplyTo>
      <wsa:Address>http://Business456.com/clientA</wsa:Address>
    </wsa:ReplyTo>
    <wsa:To s:mustUnderstand="1">http://BusinessABC.com/serviceA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:TerminateSequence>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:LastMsgNumber>30</wsrm:LastMsgNumber>
      </wsrm:TerminateSequence>
  </s:Body>
</s:Envelope>

Příklad TerminateSequenceResponse zprávy:

<s:Envelope>
  <s:Header>
    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Lower="1" Upper="30"></wsrm:AcknowledgementRange>
      <wsrm:Final></wsrm:Final>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    <wsa:Action s:mustUnderstand="1">http://docs.oasis-open.org/ws-rx/wsrm/200702/TerminateSequenceResponse</wsa:Action>
    <wsa:RelatesTo>urn:uuid:3597a398-4f3c-40f4-9335-8f1515572fdf</wsa:RelatesTo>
    <wsa:To s:mustUnderstand="1">://Business456.com/clientA</wsa:To>
  </s:Header>
  <s:Body>
    <wsrm:TerminateSequenceResponse>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
    </wsrm:TerminateSequenceResponse>
  </s:Body>
</s:Envelope>

Sekvence

Následuje seznam omezení, která platí pro sekvence:

  • B1401:WCF generuje a přistupuje k pořadovým číslům, která nejsou vyšší než xs:longmaximální inkluzivní hodnota 9223372036854775807.

Příklad Sequence záhlaví

<wsrm:Sequence s:mustUnderstand="1">
  <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
  <wsrm:MessageNumber>1</wsrm:MessageNumber>
</wsrm:Sequence>

Potvrzení žádosti

WCF používá hlavičku AckRequested jako mechanismus pro udržování připojení.

AckRequested Příklad záhlaví

<wsrm:AckRequested>
  <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
</wsrm:AckRequested>

Sekvenční potvrzení

WCF používá mechanismus "piggy-back" pro potvrzení posloupnosti poskytované ve službě WS-Reliable Messaging. Platí následující omezení:

  • R1601: Když jsou dvě opačné posloupnosti vytvořeny pomocí Offer mechanismu, hlavička SequenceAcknowledgement může být zahrnuta do jakékoli zprávy aplikace přenášené zamýšlenému příjemci. Vzdálený koncový bod musí mít přístup k připojené hlavičce SequenceAcknowledgement.

  • B1602: WCF negeneruje SequenceAcknowledgement hlavičky obsahující Nack prvky. WCF ověří, že každý Nack prvek obsahuje pořadové číslo, ale jinak ignoruje Nack prvek a hodnotu.

Příklad SequenceAcknowledgement záhlaví

<wsrm:SequenceAcknowledgement>
  <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
  <wsrm:AcknowledgementRange Lower="1" Upper="1"></wsrm:AcknowledgementRange>
</wsrm:SequenceAcknowledgement>

chyby WS-ReliableMessaging

Následuje seznam omezení, která platí pro implementaci chyb WS-ReliableMessaging ve WCF. Platí následující omezení:

  • B1701: WCF negeneruje MessageNumberRollover chyby.

  • B1702: V rámci SOAP 1.2, když koncový bod služby dosáhne limitu připojení a nemůže zpracovat nová připojení, WCF vygeneruje vnořený CreateSequenceRefused podkód chyby, netrm:ConnectionLimitReached, jak je znázorněno v následujícím příkladu.

<s:Envelope>
  <s:Header>
    <wsa:Action>http://docs.oasis-open.org/ws-rx/wsrm/200702/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">Server 'http://BusinessABC.com/serviceA' is too busy to process this request. Try again later.</s:Text>
      </s:Reason>
    </s:Fault>
  </s:Body>
</s:Envelope>

WS-Addressing Chyby

Vzhledem k tomu, že WS-ReliableMessaging používá WS-Adresování, může implementace WCF WS-ReliableMessaging generovat a přenášet chyby WS-Addressing. Tato část popisuje chyby WS-Addressing, které WCF explicitně generuje a přenáší ve vrstvě WS-ReliableMessaging.

  • B1801:WCF generuje a přenáší Message Addressing Header Required chybu, pokud je splněna jedna z následujících možností:

    • Nechybí u zprávy CreateSequence, CloseSequence nebo TerminateSequence záhlaví MessageId.

    • Nechybí u zprávy CreateSequence, CloseSequence nebo TerminateSequence záhlaví ReplyTo.

    • Zpráva CreateSequenceResponse, CloseSequenceResponse nebo TerminateSequenceResponse postrádá záhlaví RelatesTo.

  • B1802: WCF generuje a přenáší chybu Endpoint Unavailable, aby naznačil, že na základě zkoumání hlaviček adres ve zprávě CreateSequence neexistuje žádný koncový bod, který by mohl zpracovat posloupnost.

Složení protokolu

Složení s WS-Addressing

WCF podporuje dvě verze WS-Adresování: WS-Addressing 2004/08 [WS-ADDR] a W3C WS-Addressing 1.0 Recommendations [WS-ADDR-CORE] a [WS-ADDR-SOAP].

Specifikace WS-ReliableMessaging sice uvádí pouze WS-Addressing 2004/08, ale neomezuje použití verze WS-Addressing. Následuje seznam omezení, která platí pro WCF:

  • R2101: S WS-Reliable zasíláním zpráv lze použít jak WS-Addressing 2004/08, tak WS-Addressing 1.0.

  • R2102: Jedna verze WS-Addressing musí být použita v rámci dané sekvence WS-ReliableMessaging nebo v páru opačných sekvencí korelovaných pomocí mechanismu Offer.

Složení s protokolem SOAP

WCF podporuje použití protokolu SOAP 1.1 i SOAP 1.2 se službou WS-Reliable Messaging.

Složení s WS-Security a WS-SecureConversation

WCF poskytuje ochranu WS-ReliableMessaging sekvencí pomocí zabezpečeného přenosu (HTTPS), kombinace s WS-Security a kombinace s WS-Secure Konverzace. Protokol WS-ReliableMessaging 1.1, WS-Security 1.1 a WS-Secure Conversation 1.3 by se měl používat společně. Následuje seznam omezení, která platí pro WCF:

  • R2301: Aby byla chráněna integrita posloupnosti WS-ReliableMessaging, stejně jako integrita a důvěrnost jednotlivých zpráv, WCF vyžaduje použít WS-Secure konverzaci.

  • R2302: Před vytvořením sekvencí WS-ReliableMessaging musí být nejprve vytvořeno sezeníAWS-Secure.

  • R2303: Pokud životnost posloupnosti WS-ReliableMessaging překročí životnost relace konverzace WS-Secure, SecurityContextToken musí být obnovena prostřednictvím konverzace WS-Secure pomocí odpovídající vazby pro obnovení platnosti konverzace WS-Secure.

  • B2304:WS-ReliableMessaging sekvence nebo dvojice korelačních konverdních sekvencí jsou vždy vázány na jednu relaci WS-SecureConversation.

  • R2305: Při složení s WS-Secure Conversation vyžaduje WCF odpověď, aby zpráva CreateSequence obsahovala prvek wsse:SecurityTokenReference a záhlaví wsrm:UsesSequenceSTR.

Příklad UsesSequenceSTR záhlaví

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

Složení s využitím relací SSL/TLS

WCF nepodporuje kombinaci s relacemi SSL/TLS.

  • B2401: WCF negeneruje hlavičku wsrm:UsesSequenceSSL .

  • R2402: Iniciátor spolehlivého zasílání zpráv nesmí odesílat CreateSequence zprávu s hlavičkou wsrm:UsesSequenceSSL do respondéru WCF.

Složení s WS-Policy

WCF podporuje dvě verze WS-Policy: WS-Policy 1.2 a WS-Policy 1.5.

kontrolní výraz WS-ReliableMessaging WS-Policy

WCF používá WS-ReliableMessaging WS-Policy tvrzení wsrm:RMAssertion k popisu schopností koncových bodů. Následuje seznam omezení, která platí pro WCF:

  • B3001: WCF připojuje wsrmn:RMAssertion asertaci WS-Policy k prvkům wsdl:binding. WCF podporuje jak přílohy k prvkům wsdl:binding, tak wsdl:port.

  • B3002: WCF nikdy nevygeneruje wsp:Optional značku.

  • B3003: Při přístupu k kontrolnímu výrazu wsrmp:RMAssertion WS-Policy WCF ignoruje značku wsp:Optional a považuje WS-RM zásadu za povinnou.

  • R3004: Vzhledem k tomu, že WCF nevytváří relace SSL/TLS, WCF nepřijímá zásady, které specifikují wsrmp:SequenceTransportSecurity.

  • B3005: WCF vždy generuje wsrmp:DeliveryAssurance element.

  • B3006: WCF vždy určuje záruku wsrmp:ExactlyOnce doručení.

  • B3007: WCF generuje a čte následující vlastnosti aserce WS-ReliableMessaging a poskytuje kontrolu nad nimi ve WCFReliableSessionBindingElement.

    • netrmp:InactivityTimeout

    • netrmp:AcknowledgementInterval

    Příklad objektu RMAssertion.

    <wsrmp:RMAssertion>
      <wsp:Policy>
        <wsrmp:SequenceSTR/>
        <wsrmp:DeliveryAssurance>
          <wsp:Policy>
            <wsrmp:ExactlyOnce/>
            <wsrmp:InOrder/>
          </wsp:Policy>
        </wsrmp:DeliveryAssurance>
      </wsp:Policy>
      <netrmp:InactivityTimeout Milliseconds="600000"/>
      <netrmp:AcknowledgementInterval Milliseconds="200"/>
    </wsrmp:RMAssertion>
    

Rozšíření WS-ReliableMessaging řízení průtoku

WCF používá WS-ReliableMessaging rozšiřitelnost, aby poskytoval volitelnou větší kontrolu nad tokem sekvenčních zpráv.

Řízení toku je povoleno nastavením ReliableSessionBindingElement.FlowControlEnabled vlastnosti na true. Následuje seznam omezení, která platí pro WCF:

  • B4001: Pokud je povolené řízení toku spolehlivého zasílání zpráv, WCF vygeneruje netrm:BufferRemaining prvek v rozšiřitelnosti elementu SequenceAcknowledgement hlavičky, jak je znázorněno v následujícím příkladu.

    <wsrm:SequenceAcknowledgement>
      <wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
      <wsrm:AcknowledgementRange Upper="1" Lower="1"/>
      <netrm:BufferRemaining>8</netrm:BufferRemaining>
    </wsrm:SequenceAcknowledgement>
    
  • B4002: I když je povoleno řízení toku pro spolehlivé zasílání zpráv, WCF nevyžaduje prvek netrm:BufferRemaining v hlavičce SequenceAcknowledgement.

  • B4003: Cíl spolehlivého zasílání zpráv WCF používá netrm:BufferRemaining k označení, kolik nových zpráv může dočasně uložit.

  • B4004: Když je povoleno řízení toku spolehlivého zasílání zpráv, zdroj spolehlivého zasílání zpráv WCF používá hodnotu netrm:BufferRemaining k omezení přenosu zpráv.

  • B4005: WCF generuje netrm:BufferRemaining celočíselné hodnoty mezi 0 a 4096 včetně a čte celočíselné hodnoty mezi 0 a xs:intmaxInclusive hodnotou 214748364 včetně.

Vzory výměny zpráv

Tato část popisuje chování WCF při použití WS-ReliableMessaging pro různé vzory výměny zpráv. Pro každý vzor výměny zpráv se považují následující dva scénáře nasazení:

  • Neadresovatelný iniciátor: iniciátor je za bránou firewall; respondér může doručovat zprávy iniciátoru pouze prostřednictvím odpovědí HTTP.

  • Adresovatelný iniciátor: Na iniciátora i respondéra mohou být zasílány požadavky HTTP; jinými slovy, mohou být navázána dvě navzájem opačná HTTP spojení.

Jednosměrný, neadresovatelný iniciátor

Závazný

WCF poskytuje jednosměrný vzor výměny zpráv pomocí jedné sekvence přes jeden kanál HTTP. WCF používá požadavky HTTP k přenosu všech zpráv od iniciátoru do respondéru a odpovědí HTTP k přenosu všech zpráv od respondéru do iniciátoru.

CreateSequence Exchange

Iniciátor WCF odesílá zprávu CreateSequence bez prvku Offer v rámci HTTP požadavku a očekává zprávu CreateSequenceResponse v HTTP odpovědi. Respondér WCF vytvoří sekvenci a odešle CreateSequenceResponse zprávu bez Accept prvku odpovědi HTTP.

Sekvenční potvrzení

Iniciátor WCF zpracovává potvrzení odpovědi všech zpráv s výjimkou CreateSequence zpráv a chybových zpráv. Respondér WCF vždy přenáší samostatné potvrzení odpovědi HTTP na všechny sekvence a AckRequested zprávy.

CloseSequence Exchange

Iniciátor WCF přenáší CloseSequence zprávu na požadavek HTTP a očekává CreateSequenceResponse zprávu v odpovědi HTTP. Respondér WCF předá CloseSequenceResponse zprávu v odpovědi HTTP.

TerminateSequence Exchange

Iniciátor WCF přenáší TerminateSequence zprávu na požadavek HTTP a očekává TerminateSequenceResponse zprávu v odpovědi HTTP. Respondér WCF předá TerminateSequenceResponse zprávu v odpovědi HTTP.

Jednosměrný, adresovatelný iniciátor

Závazný

WCF poskytuje jednosměrný vzor výměny zpráv pomocí jedné sekvence přes jeden příchozí a jeden odchozí kanál HTTP. WCF používá požadavky HTTP k přenosu všech zpráv. Všechny odpovědi HTTP mají prázdný text a stavový kód HTTP 202.

CreateSequence Exchange

Iniciátor WCF přenáší zprávu CreateSequence bez prvku Offer v rámci požadavku HTTP. Respondér WCF vytvoří sekvenci a odešle CreateSequenceResponse zprávu bez Accept prvku na požadavku HTTP.

Duplexní, adresovatelný iniciátor

Závazný

WCF poskytuje plně asynchronní obousměrný vzor výměny zpráv pomocí dvou sekvencí přes jeden příchozí a jeden odchozí kanál HTTP. Tento vzor výměny zpráv lze kombinovat s Request/ReplyAddressable modelem výměny zpráv iniciátoru omezeným způsobem. WCF používá k přenosu všech zpráv požadavky HTTP. Všechny odpovědi HTTP mají prázdný text a stavový kód HTTP 202.

CreateSequence Exchange

Iniciátor WCF přenáší CreateSequence zprávu s elementem Offer v požadavku HTTP. Respondér WCF zajišťuje, že CreateSequence přidá element Offer, následně vytvoří sekvenci a přenese zprávu CreateSequenceResponse s prvkem Accept.

Životnost sekvence

WCF považuje dvě sekvence za jednu plně duplexní relaci.

Při vzniku chyby v jedné sekvenci WCF očekává, že vzdálený koncový bod způsobí chybu v obou sekvencích. Při detekci chyby v jedné sekvenci způsobí WCF chybu v obou sekvencích.

WCF může ukončit svoji odchozí sekvenci a dál zpracovávat zprávy ve své příchozí sekvenci. WCF může naopak zpracovat uzavření příchozí sekvence a pokračovat v odesílání zpráv ve své odchozí sekvenci.

Request-Reply a jednosměrný, ne adresovatelný iniciátor

Závazný

WCF poskytuje jednosměrný vzor výměny zpráv s žádostí a odpovědí pomocí dvou sekvencí přes jeden kanál HTTP. WCF používá požadavky HTTP k přenosu všech zpráv od iniciátoru do respondéru a odpovědí HTTP k přenosu všech zpráv od respondéru do iniciátoru.

CreateSequence Exchange

Iniciátor WCF přenáší CreateSequence zprávu s elementem Offer na požadavku HTTP a očekává CreateSequenceResponse zprávu v odpovědi HTTP. Respondér WCF vytvoří sekvenci a odešle CreateSequenceResponse zprávu s elementem Accept v odpovědi HTTP.

Jednosměrná zpráva

Aby se jednosměrná výměna zpráv úspěšně dokončila, iniciátor WCF odešle zprávu sekvence požadavků na požadavek HTTP a přijme samostatnou SequenceAcknowledgement zprávu v odpovědi HTTP. SequenceAcknowledgement musí zprávu přenášenou potvrdit.

Respondér WCF může na požadavek odpovědět potvrzením, chybou nebo odpovědí s prázdným textem a stavovým kódem HTTP 202.

Obousměrné zprávy

Chcete-li úspěšně dokončit obousměrný protokol výměny zpráv, iniciátor WCF odešle zprávu sekvence požadavků na požadavek HTTP a obdrží zprávu sekvence odpovědí v odpovědi HTTP. Odpověď musí obsahovat SequenceAcknowledgement potvrzení zprávy o posloupnosti požadavků.

Respondér WCF může na požadavek odpovědět odpovědí aplikace, chybou nebo odpovědí s prázdným textem a stavovým kódem HTTP 202.

Vzhledem k přítomnosti jednosměrných zpráv a načasování odpovědí aplikace nemá pořadové číslo zprávy žádosti a pořadové číslo zprávy odpovědi žádnou korelaci.

Opakování odpovědí

WCF spoléhá na korelaci http request-reply pro obousměrnou korelaci protokolu výměny zpráv. Z tohoto důvodu iniciátor WCF nepřestává opakovat zprávu posloupnosti požadavků, když je tato zpráva potvrzena, ale až když odpověď HTTP obsahuje SequenceAcknowledgement, odpověď aplikace nebo chybu. Responder WCF opakuje odpovědi na HTTP odpovědi požadavku, ke kterému je odpověď korelována.

CloseSequence Exchange

Po přijetí všech zpráv sekvence odpovědí a potvrzení pro všechny zprávy sekvence žádosti, iniciátor WCF odesílá CloseSequence zprávu pro sekvenci žádosti pomocí požadavku HTTP a očekává CloseSequenceResponse v odpovědi HTTP.

Zavření sekvence požadavku implicitně zavře sekvenci odpovědi. To znamená, že iniciátor WCF zahrnuje ve zprávě konečnou sekvenci SequenceAcknowledgementCloseSequence odpovědí a sekvence odpovědí neobsahuje výměnu CloseSequence.

Respondér WCF zajišťuje, že všechny odpovědi jsou potvrzeny a je přenesena CloseSequenceResponse zpráva v odpovědi HTTP.

TerminateSequence Exchange

Po přijetí CloseSequenceResponse zprávy iniciátor WCF odešle TerminateSequence zprávu pro sekvenci požadavku prostřednictvím HTTP požadavku a očekává TerminateSequenceResponse na HTTP odpověď.

Podobně jako výměna CloseSequence ukončení sekvence požadavků implicitně ukončí sekvenci odpovědí. To znamená, že iniciátor WCF obsahuje finální SequenceAcknowledgement posloupnosti odpovědí ve zprávě TerminateSequence a posloupnost odpovědí nemá výměnu TerminateSequence.

Respondér WCF předá TerminateSequenceResponse zprávu v odpovědi HTTP.

Žádost/odpověď, adresovatelný iniciátor

Závazný

WCF poskytuje vzor výměny zpráv s žádostí a odpovědí pomocí dvou sekvencí přes jeden příchozí a jeden odchozí kanál HTTP. Tento model výměny zpráv lze směšovat s modelem Duplex, Addressable výměny zpráv iniciátoru omezeným způsobem. WCF používá požadavky HTTP k přenosu všech zpráv. Všechny odpovědi HTTP mají prázdný text a stavový kód HTTP 202.

CreateSequence Exchange

Iniciátor WCF přenáší CreateSequence zprávu s elementem Offer v požadavku HTTP. Respondér WCF zajistí, že CreateSequenceOffer prvek, pak vytvoří posloupnost a předá CreateSequenceResponse zprávu s elementem Accept .

Korelace žádosti/odpovědi

Toto platí pro všechny korelované požadavky a odpovědi:

  • WCF zajišťuje, že všechny zprávy žádosti o aplikaci mají ReplyTo odkaz na koncový bod a MessageId.

  • WCF použije odkaz na místní koncový bod jako referenci pro každou zprávu žádosti o aplikaci ReplyTo. Odkaz na místní koncový bod je CreateSequence zprávy ReplyTo pro iniciátora a CreateSequence zprávy To pro respondéra.

  • WCF zajišťuje, že příchozí zprávy požadavku mají MessageId a ReplyTo.

  • WCF zajišťuje, že URI odkazu na koncový bod u všech požadavků aplikace odpovídá místnímu odkazu na koncový bod, jak již bylo dříve definováno.

  • WCF zajišťuje, aby všechny odpovědi měly správné hlavičky RelatesTo a To podle pravidel korelace požadavků a odpovědí wsa.