Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
aOffer/Endpoint
.R1102: Odkazy na koncové body
AcksTo
,ReplyTo
aOffer/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
aEndpoint
na koncové body je před vytvořením sekvence stejná.
- Respondér WCF ověřuje, že část URI v odkazech
R1103: Odkazy na koncové body
AcksTo
,ReplyTo
aOffer/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
aOffer/Endpoint
naCreateSequence
jsou identické a používá referenční parametry z odkazu na koncový bodReplyTo
pro potvrzení a sekvenční zprávy opačného směru.
- WCF nevynucuje, ale předpokládá, že referenční parametry v referencích na koncové body
B1104: Iniciátor WCF negeneruje volitelný element
Expires
neboOffer/Expires
ve zprávěCreateSequence
.B1105: Při přístupu ke
CreateSequence
zprávě používá respondér WCF hodnotuExpires
v elementuCreateSequence
jako hodnotuExpires
v elementuCreateSequenceResponse
. V opačném případě respondér WCF přečte a ignoruje hodnotyExpires
aOffer/Expires
.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 prvcíchCreateSequence/Offer
aCreateSequenceResponse
.B1108: WCF používá pouze hodnoty
DiscardFollowingFirstGap
aNoDiscard
v elementuIncompleteSequenceBehavior
.- WS-ReliableMessaging využívá
Offer
mechanismus k vytvoření dvou opačně 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, je odpověď sCreateSequenceResponse
, ale bezAccept
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
neobsahujeOffer
prvek, obousměrný respondér WCF odmítne nabízenou sekvenci reagováním s chybouCreateSequenceRefused
.R1112: Při vytvoření dvou opačných sekvencí pomocí
Offer
mechanismu,[address]
vlastnostCreateSequenceResponse/Accept/AcksTo
odkazu na koncový bod musí odpovídat cílové URI adreseCreateSequence
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áchCloseSequence
aTerminateSequence
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í spolehlivý příjemce 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 bez pochyby ví, že sekvence končí, a okamžitě uvolní prostředky.B1304: Když je přijata zpráva
TerminateSequence
před handshakeCloseSequence/CloseSequenceResponse
, cíl spolehlivého zasílání zpráv WCF odpoví 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 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čkaSequenceAcknowledgement
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čceSequenceAcknowledgement
.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 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
neboTerminateSequence
záhlavíMessageId
.Nechybí u zprávy
CreateSequence
,CloseSequence
neboTerminateSequence
záhlavíReplyTo
.Zpráva
CreateSequenceResponse
,CloseSequenceResponse
neboTerminateSequenceResponse
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 prvekwsse: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čkouwsrm: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ůmwsdl:binding
. WCF podporuje jak přílohy k prvkůmwsdl:binding
, takwsdl: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čkuwsp: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 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 ří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 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 povoleno řízení toku pro spolehlivé zasílání zpráv, WCF nevyžaduje prvek
netrm:BufferRemaining
v hlavičceSequenceAcknowledgement
.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 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í:
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/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
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 SequenceAcknowledgement
CloseSequence
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 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 referenci pro každou zprávu žádosti o aplikaci
ReplyTo
. Odkaz na místní koncový bod jeCreateSequence
zprávyReplyTo
pro iniciátora aCreateSequence
zprávyTo
pro respondéra.WCF zajišťuje, že příchozí zprávy požadavku mají
MessageId
aReplyTo
.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
aTo
podle pravidel korelace požadavků a odpovědíwsa
.