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ávaReplyTo
AcksTo
aOffer/Endpoint
.R1102:
AcksTo
ReplyTo
Odkazy na koncové body veOffer/Endpoint
CreateSequence
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
AcksTo
ReplyTo
URI aEndpoint
odkazy na koncové body jsou před vytvořením sekvence stejné.
- Respondér WCF ověří, že část identifikátoru
R1103:
AcksTo
ReplyTo
Odkazy naCreateSequence
koncové body veOffer/Endpoint
zprávě by měly mít stejnou sadu parametrů odkazu.- WCF nevynucuje, ale předpokládá, že referenční parametry
AcksTo
ReplyTo
aOffer/Endpoint
odkazy na koncové body jsou identické a používají referenčníCreateSequence
parametry zReplyTo
odkazu na koncový bod pro potvrzení a naopak sekvenční zprávy.
- WCF nevynucuje, ale předpokládá, že referenční parametry
B1104: Iniciátor WCF negeneruje volitelný
Expires
prvek neboOffer/Expires
prvek veCreateSequence
zprávě.B1105: Při přístupu ke
CreateSequence
zprávě používáExpires
respondér WCF hodnotu vCreateSequence
elementuExpires
jako hodnotu v elementuCreateSequenceResponse
. V opačném případě respondér WCF přečte a ignorujeExpires
hodnoty aOffer/Expires
hodnoty.B1106: Při přístupu ke
CreateSequenceResponse
zprávě přečte iniciátor WCF volitelnouExpires
hodnotu, ale nepoužívá ji.B1107: Iniciátor WCF a respondér vždy vygenerují volitelný
IncompleteSequenceBehavior
prvek v elementechCreateSequence/Offer
aCreateSequenceResponse
elementy.B1108: WCF používá pouze
DiscardFollowingFirstGap
hodnoty aNoDiscard
hodnoty v elementuIncompleteSequenceBehavior
.- WS-ReliableMessaging využívá
Offer
mechanismus k navázání dvou naopak korelovaných sekvencí, které tvoří relaci.
- WS-ReliableMessaging využívá
B1109: Pokud
CreateSequence
obsahujeOffer
prvek, jedním ze způsobů, jak respondér WCF odmítne nabízenou sekvenci reagováním bezAccept
CreateSequenceResponse
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
neobsahujeOffer
prvek, obousměrný respondér WCF odmítne nabízenou sekvenci reagováním s chybouCreateSequenceRefused
.R1112: Při vytvoření dvou naopak sekvence pomocí
Offer
mechanismu,[address]
vlastnostCreateSequenceResponse/Accept/AcksTo
odkazu na koncový bod musí odpovídat cílovému identifikátoru URICreateSequence
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šemiCloseSequence
zprávamiTerminateSequence
pro danou sekvenci. To znamená, žeLastMsgNumber
buď není k dispozici ve všechCloseSequence
aTerminateSequence
zprávách, nebo je přítomna a identická u všechCloseSequence
aTerminateSequence
zpráv.B1303: Při přijetí
TerminateSequence
zprávy poCloseSequence/CloseSequenceResponse
handshake odpoví cíl spolehlivého zasílání zpráv zpráv zpráv zprávouTerminateSequenceResponse
. Vzhledem k tomu, že zdroj spolehlivého zasílání zpráv má konečné potvrzení před odeslánímTerminateSequence
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
TerminateSequence
CloseSequence/CloseSequenceResponse
handshake odpoví cíl spolehlivého zasílání zpráv WCF zprávouTerminateSequenceResponse
. 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ímFaulted
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:long
maximá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čkaSequenceAcknowledgement
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 piggybackedSequenceAcknowledgement
.B1602: WCF negeneruje
SequenceAcknowledgement
hlavičky obsahujícíNack
prvky. WCF ověří, že každýNack
prvek obsahuje pořadové číslo, ale jinak ignorujeNack
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: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>
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íCreateSequence
záhlaví neboTerminateSequence
zprávaMessageId
.CloseSequence
ChybíCreateSequence
záhlaví neboTerminateSequence
zprávaReplyTo
.Chybí
CreateSequenceResponse
záhlaví ,CloseSequenceResponse
neboTerminateSequenceResponse
zprávaRelatesTo
.
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 veCreateSequence
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 obsahovalawsse:SecurityTokenReference
prvek awsrm: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čkouwsrm: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 kwsdl:binding
prvkům. WCF podporuje jak přílohy, takwsdl:binding
wsdl: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 ignorujewsp: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 WCF
ReliableSessionBindingElement
: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 elementuSequenceAcknowledgement
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 vSequenceAcknowledgement
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 axs:int
maxInclusive
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/Reply
Addressable
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
má Offer
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 SequenceAcknowledgement
odpověď , 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 SequenceAcknowledgement
CloseSequence
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 CreateSequence
má Offer
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 aMessageId
.WCF použije odkaz na místní koncový bod jako zprávu každé žádosti
ReplyTo
o aplikaci . Odkaz na místní koncový bod jeCreateSequence
zprávaReplyTo
pro iniciátora aCreateSequence
zprávuTo
pro respondéru.WCF zajišťuje, že příchozí zprávy požadavku mají
MessageId
aReplyTo
.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
aTo
hlavičky následujícíwsa
pravidla korelace požadavků a odpovědí.