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 z ú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ý počínaje rozhraním .NET Framework 3.5.

Protokol WS-ReliableMessaging února 2007 je implementován ve WCF ReliableSessionBindingElementpomocí .

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

  • Iniciátor: Klient, který inicializuje 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 Obor názvů
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)

Zasí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áva ReplyToAcksTo a Offer/Endpoint.

  • R1102: AcksToReplyTo Odkazy na koncové body ve Offer/EndpointCreateSequence zprávě musí mít hodnoty adres s identickými řetězcovými reprezentacemi tak, aby odpovídaly oktetové sadě.

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

    • WCF nevynucuje, ale předpokládá, že referenční parametry AcksToReplyTo a Offer/Endpoint odkazy na koncové body jsou identické a používají referenční CreateSequence parametry z ReplyTo odkazu na koncový bod pro potvrzení a naopak sekvenční zprávy.
  • B1104: Iniciátor WCF negeneruje volitelný Expires prvek nebo Offer/Expires prvek ve CreateSequence zprávě.

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

  • 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 elementech CreateSequence/Offer a CreateSequenceResponse elementy.

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

    • WS-ReliableMessaging využívá Offer mechanismus k navázání dvou naopak 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 reagováním bez AcceptCreateSequenceResponse prvku.

  • B1110: Pokud odpověď spolehlivého zasílání zpráv odmítne nabízenou sekvenci, iniciátor WCF vyvolá 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 naopak sekvence pomocí Offer mechanismu, [address] vlastnost CreateSequenceResponse/Accept/AcksTo odkazu na koncový bod musí odpovídat cílovému identifikátoru URI CreateSequence zprávy bajt pro bajt.

  • R1113: Při vytvoření dvou naopak sekvence pomocí Offer mechanismu musí být všechny zprávy v obou sekvencích proudící z iniciátoru do respondéru odeslány do stejného odkazu 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ěrné vzory odpovědí na požadavky a úplné duplexní zasílání zpráv. Mechanismus WS-ReliableMessaging Offer zapnutý CreateSequence a CreateSequenceResponse umožňuje vytvořit dvě korelované konverdační sekvence a poskytuje protokol relace, 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 "piggy-backing" sekvencí potvrzení u zpráv aplikace. 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ého zasílání zpráv WCF nesicializuje vypnutí a zdroj spolehlivého zasílání zpráv WCF nepodporuje vypnutí iniciované cílem spolehlivého 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ého rozsahu zpráv sekvence před odesláním CloseSequence zprávy.

  • 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 CloseSequence zprávy.

  • 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á metodu TerminateSequence/TerminateSequenceResponse handshake po dokončení CloseSequence/CloseSequenceResponse metody 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 dokončení CloseSequence/CloseSequenceResponse metody handshake.

  • R1302: WCF ověřuje, že LastMsgNumber je prvek konzistentní napříč všemi CloseSequence zprávami 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í cíl spolehlivého zasílání zpráv zpráv 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 pochybuje, že sekvence končí a okamžitě uvolní prostředky.

  • B1304: Při přijetí zprávy před metodou TerminateSequenceCloseSequence/CloseSequenceResponse handshake odpoví cíl spolehlivého zasílání zpráv WCF 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 udržování.

AckRequested Příklad záhlaví

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

SequenceAcknowledgement

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

  • R1601: Při vytvoření dvou naopak sekvence pomocí Offer mechanismu může být hlavička SequenceAcknowledgement 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 hlavičce piggybacked 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 WCF chyb WS-ReliableMessaging. Platí následující omezení:

  • B1701: WCF negeneruje MessageNumberRollover chyby.

  • B1702: Přes PROTOKOL 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:ConnectionLimitReachedjak 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>

Chyby ws-adresování

Vzhledem k tomu, že WS-ReliableMessaging používá WS-Adresování, může implementace WCF WS-ReliableMessaging generovat a přenášet chyby WS-Adresování. Tato část popisuje chyby WS-Adresování, 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í:

    • CloseSequence Chybí CreateSequencezáhlaví nebo TerminateSequence zprávaMessageId.

    • CloseSequence Chybí CreateSequencezáhlaví nebo TerminateSequence zprávaReplyTo.

    • Chybí CreateSequenceResponsezáhlaví , CloseSequenceResponsenebo TerminateSequenceResponse zpráva RelatesTo .

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

Složení protokolu

Složení s adresování WS

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

Přestože specifikace WS-ReliableMessaging zmíní pouze WS-Adresování 2004/08, neomezuje použití verze WS-Adresování. Následuje seznam omezení, která platí pro WCF:

  • R2101: Ws-Adresování 2004/08 i WS-Adresování 1.0 lze použít s WS-Reliable Messaging.

  • R2102: V dané sekvenci WS-ReliableMessaging nebo páru konverdních sekvencí, které korelují pomocí Offer mechanismu, musí být použita jedna verze WS-Adresování.

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 pro sekvence WS-ReliableMessaging pomocí zabezpečeného přenosu (HTTPS), složení s WS-Security a složení pomocí WS-Secure Conversation. Protokol WS-ReliableMessaging 1.1, WS-Security 1.1 a WS-Secure Conversation 1.3 by se měly používat společně. Následuje seznam omezení, která platí pro WCF:

  • R2301: Aby bylo možné chránit integritu sekvence WS-ReliableMessaging kromě integrity a důvěrnosti jednotlivých zpráv, WCF vyžaduje, aby byla použita služba WS-Secure Conversation.

  • R2302:AWS-Secure Conversation session musí být vytvořena před vytvořením pracovních sekvencí WS-ReliableMessaging.

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

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

  • R2305: Při vytváření pomocí WS-Secure Conversation, wcf responder vyžaduje, aby CreateSequence zpráva obsahovala wsse:SecurityTokenReference prvek a wsrm:UsesSequenceSTR záhlaví.

Příklad UsesSequenceSTR záhlaví

<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>

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

WCF nepodporuje složení 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í pomocí WS-Policy

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

WS-ReliableMessaging WS-Policy Assertion

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

  • B3001: WCF připojí wsrmn:RMAssertion kontrolní výraz WS-Policy k wsdl:binding prvkům. WCF podporuje jak přílohy, tak wsdl:bindingwsdl:port prvky.

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

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

  • R3004: Vzhledem k tomu, že WCF nevytváří relace SSL/TLS, WCF nepřijímá zásady, které určují 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 kontrolního výrazu WS-ReliableMessaging a poskytuje nad nimi kontrolu 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 pro řízení toku

WCF využívá rozšiřitelnost WS-ReliableMessaging k zajištění volitelného dalšího přísnějšího řízení toku 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 povolené řízení toku spolehlivého zasílání zpráv, WCF nevyžaduje netrm:BufferRemaining prvek v SequenceAcknowledgement hlavičce.

  • 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 ukládat do vyrovnávací paměti.

  • B4004:Pokud je povolené řízení toku spolehlivého zasílání zpráv, použije zdroj spolehlivého netrm:BufferRemaining zasílání zpráv WCF hodnotu 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í:

  • Ne adresovatelný iniciátor: Iniciátor je za bránou firewall; Respondér může doručovat zprávy iniciátoru pouze u odpovědí HTTP.

  • Adresovatelný iniciátor: Iniciátor a respondér mohou být odeslány požadavky HTTP; Jinými slovy, lze navázat dvě naopak připojení HTTP.

Jednosměrný, ne adresovatelný iniciátor

Vazba

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 přenáší CreateSequence zprávu bez Offer prvku 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 bez Accept prvku odpovědi HTTP.

SequenceAcknowledgement

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

Vazba

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áší CreateSequence zprávu bez Offer prvku 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

Vazba

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 CreateSequenceOffer prvek, pak vytvoří sekvenci a předá CreateSequenceResponse zprávu elementem Accept .

Životnost sekvence

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

Při generování chyby, která je chybou v jedné sekvenci, WCF očekává, že vzdálený koncový bod bude chybovat obě sekvence. Při čtení chyby, která je chybou v jedné sekvenci, WCF chybuje obě sekvence.

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

Request-Reply and one-way, non-addressable iniciátor

Vazba

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. Musí SequenceAcknowledgement potvrdit přenášenou zprávu.

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í přenášené zprávy 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 nezastaví opakování zprávy pořadí požadavků, pokud je zpráva sekvence požadavku potvrzena, ale spíše když odpověď HTTP nese SequenceAcknowledgementodpověď , odpověď aplikace nebo chyba. Respondér WCF opakuje odpovědi na odpověď HTTP požadavku, na který odpovídá korelace odpovědi.

CloseSequence Exchange

Po přijetí všech zpráv sekvence odpovědí a potvrzení pro všechny zprávy pořadí požadavků, iniciátor WCF předá CloseSequence zprávu pro pořadí požadavků na požadavek HTTP a očekává CloseSequenceResponse na odpovědi HTTP.

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

Respondér WCF zajišťuje, že se všechny odpovědi potvrdí a přenesou CloseSequenceResponse zprávu na odpovědi HTTP.

TerminateSequence Exchange

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

CloseSequence Podobně jako výměna ukončování sekvence požadavků implicitně ukončí sekvenci odpovědí. To znamená, že iniciátor WCF obsahuje konečné pořadí SequenceAcknowledgement odpovědí ve TerminateSequence zprávě a sekvence odpovědí nemá TerminateSequence výměnu.

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

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

Vazba

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 zprávu každé žádosti ReplyToo aplikaci . Odkaz na místní koncový bod je CreateSequence zpráva ReplyTo pro iniciátora a CreateSequence zprávu To pro respondéru.

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

  • WCF zajišťuje, že ReplyTo identifikátor URI odkazu na koncový bod všech zpráv požadavků aplikace odpovídá odkazu na místní koncový bod, jak je definováno dříve.

  • WCF zajišťuje, aby všechny odpovědi nesly správné RelatesTo a To hlavičky následující wsa pravidla korelace požadavků a odpovědí.