Reliable Messaging Protocol version 1.1
Det här avsnittet beskriver implementeringsinformation för Windows Communication Foundation (WCF) för WS-ReliableMessaging februari 2007 (version 1.1) som krävs för att samverka med HTTP-transporten. WCF följer WS-ReliableMessaging-specifikationen med de begränsningar och förtydliganden som beskrivs i det här avsnittet. Observera att WS-ReliableMessaging version 1.1-protokollet implementeras från och med .NET Framework 3.5.
WS-ReliableMessaging Februari 2007-protokollet implementeras i WCF av ReliableSessionBindingElement.
För enkelhetens skull använder ämnet följande roller:
Initierare: Klienten som initierar skapandet av WS-Reliable Message-sekvensen.
Svarare: Tjänsten som tar emot initierarens begäranden.
Det här dokumentet använder prefixen och namnrymderna i följande tabell.
Prefix | Namnområde |
---|---|
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 | (Antingen WS-Policy 1.2 eller WS-Policy 1.5) |
Meddelandetjänster
Skapa sekvens
WCF implementerar CreateSequence
och CreateSequenceResponse
meddelanden för att upprätta en tillförlitlig meddelandesekvens. Följande restriktioner gäller:
B1101: WCF-initieraren använder samma slutpunktsreferens som
CreateSequence
meddelandetsReplyTo
,AcksTo
ochOffer/Endpoint
.R1102: Slutpunktsreferenserna
AcksTo
ReplyTo
ochOffer/Endpoint
iCreateSequence
meddelandet måste ha adressvärden med identiska strängrepresentationer så att de matchar oktettvis.- WCF-svararen verifierar att URI-delen av
AcksTo
ReplyTo
, ochEndpoint
slutpunktsreferenserna är identiska innan en sekvens skapas.
- WCF-svararen verifierar att URI-delen av
R1103: Slutpunktsreferenserna
AcksTo
ReplyTo
ochOffer/Endpoint
iCreateSequence
meddelandet ska ha samma uppsättning referensparametrar.- WCF tillämpar inte, men förutsätter att referensparametrarna
AcksTo
för ,ReplyTo
ochOffer/Endpoint
slutpunktsreferenser påCreateSequence
är identiska och använder referensparametrar från slutpunktsreferensenReplyTo
för bekräftelser och samtalssekvensmeddelanden.
- WCF tillämpar inte, men förutsätter att referensparametrarna
B1104: WCF-initieraren genererar inte det valfria
Expires
elementet ellerOffer/Expires
elementetCreateSequence
i meddelandet.B1105: Vid åtkomst till
CreateSequence
meddelandet använder WCF-svararenExpires
värdet i elementetCreateSequence
somExpires
värde i elementetCreateSequenceResponse
. Annars läser och ignorerar WCF-svararenExpires
värdena ochOffer/Expires
.B1106: Vid åtkomst till
CreateSequenceResponse
meddelandet läser WCF-initieraren det valfriaExpires
värdet men använder det inte.B1107: WCF-initieraren och svararen genererar alltid det valfria
IncompleteSequenceBehavior
elementet i elementenCreateSequence/Offer
ochCreateSequenceResponse
.B1108: WCF använder endast
DiscardFollowingFirstGap
värdena ochNoDiscard
i elementetIncompleteSequenceBehavior
.- WS-ReliableMessaging använder mekanismen
Offer
för att upprätta de två omvända korrelerade sekvenserna som utgör en session.
- WS-ReliableMessaging använder mekanismen
B1109: Om
CreateSequence
innehåller ettOffer
element avvisar WCF-svararen den erbjudna sekvensen genom att svara med ettCreateSequenceResponse
utan elementAccept
.B1110: Om en Reliable Messaging Responder avvisar den erbjudna sekvensen felar WCF-initieraren den nyligen etablerade sekvensen.
B1111: Om
CreateSequence
inte innehåller ettOffer
element avvisar den dubbelriktade WCF-svararen den erbjudna sekvensen genom att svara med ettCreateSequenceRefused
fel.R1112: När två omvända sekvenser upprättas med hjälp av mekanismen
Offer
[address]
måste egenskapen för slutpunktsreferensenCreateSequenceResponse/Accept/AcksTo
matcha mål-URI:CreateSequence
n för meddelandebytet för byte.R1113: När två omvända sekvenser upprättas med hjälp av mekanismen
Offer
måste alla meddelanden på båda sekvenserna som flödar från initieraren till svararen skickas till samma slutpunktsreferens.
WCF använder WS-ReliableMessaging för att upprätta tillförlitliga sessioner mellan initieraren och svararen. WCF WS-ReliableMessaging-implementeringen ger en tillförlitlig session för enkelriktade, begärandesvar och fullständiga duplex-meddelandemönster. WS-ReliableMessaging-mekanismen Offer
på CreateSequence
och CreateSequenceResponse
gör att du kan upprätta två korrelerade converse-sekvenser och tillhandahåller ett sessionsprotokoll som är lämpligt för alla meddelandeslutpunkter. Eftersom WCF tillhandahåller en säkerhetsgaranti för en sådan session, inklusive skydd från slutpunkt till slutpunkt för sessionsintegritet, är det praktiskt att se till att meddelanden som är avsedda för samma part kommer till samma mål. På så sätt kan du också "spargrisstöda" sekvensbekrästningar i programmeddelanden. Därför gäller begränsningarna R1102, R1112 och R1113 för WCF.
Ett exempel på ett CreateSequence
meddelande.
<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>
Ett exempel på ett CreateSequenceResponse
meddelande.
<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>
Stänga en sekvens
WCF använder meddelandena CloseSequence
och CloseSequenceResponse
för en reliable messaging-källinitierad avstängning. WCF Reliable Messaging-målet initierar inte avstängning och WCF Reliable Messaging-källan stöder inte en tillförlitlig meddelandeinitierad avstängning. Följande restriktioner gäller:
B1201: WCF Reliable Messaging-källan skickar alltid ett
CloseSequence
meddelande för att stänga av sekvensen.B1202: Reliable Messaging-källan väntar på bekräftelse av alla sekvensmeddelanden innan meddelandet skickas
CloseSequence
.B1203: Reliable Messaging-källan innehåller alltid det valfria
LastMsgNumber
elementet såvida inte sekvensen inte innehåller meddelanden.R1204: Målet Reliable Messaging får inte initiera avstängningen genom att skicka ett
CloseSequence
meddelande.B1205: När du tar emot ett
CloseSequence
meddelande anser WCF Reliable Messaging-källan att sekvensen är ofullständig och skickar ett fel.
Ett exempel på ett CloseSequence
meddelande.
<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>
Exempelmeddelande CloseSequenceResponse
:
<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>
Sekvensavslut
WCF använder främst handskakningen TerminateSequence/TerminateSequenceResponse
när handskakningen har slutförts CloseSequence/CloseSequenceResponse
. WCF Reliable Messaging-målet initierar inte avslutningen och reliable messaging-källan stöder inte en reliable messaging-målinitierad avslutning. Följande restriktioner gäller:
B1301: WCF-initieraren skickar
TerminateSequence
endast meddelandet efter att handskakningen har slutförtsCloseSequence/CloseSequenceResponse
.R1302: WCF verifierar att elementet
LastMsgNumber
är konsekvent för allaCloseSequence
ochTerminateSequence
meddelanden för en viss sekvens. Det innebär attLastMsgNumber
det antingen inte finns på allaCloseSequence
ochTerminateSequence
meddelanden, eller att det finns och är identiskt för allaCloseSequence
ochTerminateSequence
meddelanden.B1303: När du tar emot ett
TerminateSequence
meddelande efter handskakningenCloseSequence/CloseSequenceResponse
svarar reliable messaging-målet med ettTerminateSequenceResponse
meddelande. Eftersom reliable messaging-källan har den slutliga bekräftelsen innan meddelandetTerminateSequence
skickas vet reliable messaging-målet utan tvekan att sekvensen slutar och återtar resurser omedelbart.B1304: När du tar emot ett
TerminateSequence
meddelande före handskakningenCloseSequence/CloseSequenceResponse
svarar WCF Reliable Messaging-målet med ettTerminateSequenceResponse
meddelande. Om målet Reliable Messaging fastställer att det inte finns några inkonsekvenser i sekvensen väntar Reliable Messaging-målet på en angiven tid för programmets mål innan resurserna frigörs, så att klienten kan ta emot den slutliga bekräftelsen. Annars återtar Reliable Messaging-målet resurser omedelbart och anger för programmets mål att sekvensen slutar med tvivel genom att händelsen höjsFaulted
.
Ett exempel på ett TerminateSequence
meddelande.
<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>
Exempelmeddelande TerminateSequenceResponse
:
<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>
Sekvenser
Följande är en lista över begränsningar som gäller för sekvenser:
- B1401:WCF genererar och kommer åt sekvensnummer som inte är högre än
xs:long
maximalt inkluderande värde, 9223372036854775807.
Ett exempel på en Sequence
rubrik.
<wsrm:Sequence s:mustUnderstand="1">
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:MessageNumber>1</wsrm:MessageNumber>
</wsrm:Sequence>
Bekräftelse av begäran
WCF använder AckRequested
huvudet som en keep-alive-mekanism.
Ett exempel på en AckRequested
rubrik.
<wsrm:AckRequested>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
</wsrm:AckRequested>
SequenceAcknowledgement
WCF använder en "piggy-back"-mekanism för sekvensbekräsckningar som tillhandahålls i WS-Reliable Messaging. Följande restriktioner gäller:
R1601: När två omvända sekvenser upprättas med hjälp av mekanismen
Offer
SequenceAcknowledgement
kan rubriken inkluderas i alla programmeddelanden som skickas till den avsedda mottagaren. Fjärrslutpunkten måste kunna komma åt en piggybacked-rubrikSequenceAcknowledgement
.B1602: WCF genererar
SequenceAcknowledgement
inte rubriker som innehållerNack
element. WCF verifierar att varjeNack
element innehåller ett sekvensnummer, men ignorerar annars elementetNack
och värdet.
Ett exempel på en SequenceAcknowledgement
rubrik.
<wsrm:SequenceAcknowledgement>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:AcknowledgementRange Lower="1" Upper="1"></wsrm:AcknowledgementRange>
</wsrm:SequenceAcknowledgement>
WS-ReliableMessaging-fel
Följande är en lista över begränsningar som gäller för WCF-implementeringen av WS-ReliableMessaging-fel. Följande restriktioner gäller:
B1701: WCF genererar
MessageNumberRollover
inga fel.B1702: Över SOAP 1.2, när tjänstslutpunkten når anslutningsgränsen och inte kan bearbeta nya anslutningar, genererar WCF en kapslad
CreateSequenceRefused
felunderkod,netrm:ConnectionLimitReached
, som visas i följande exempel.
<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-adresseringsfel
Eftersom WS-ReliableMessaging använder WS-Addressing kan WCF WS-ReliableMessaging-implementeringen generera och överföra WS-adresseringsfel. Det här avsnittet beskriver WS-adresseringsfel som WCF uttryckligen genererar och överför på WS-ReliableMessaging-lagret:
B1801:WCF genererar och överför
Message Addressing Header Required
felet när något av följande är sant:Ett
CreateSequence
,CloseSequence
eller-meddelandeTerminateSequence
saknar ettMessageId
huvud.Ett
CreateSequence
,CloseSequence
eller-meddelandeTerminateSequence
saknar ettReplyTo
huvud.Ett
CreateSequenceResponse
meddelande ,CloseSequenceResponse
ellerTerminateSequenceResponse
ett meddelande saknar ettRelatesTo
huvud.
B1802:WCF genererar och överför felet för att indikera att det inte finns någon slutpunktslyssning
Endpoint Unavailable
som kan bearbeta sekvensen baserat på undersökning av adressrubrikerna iCreateSequence
meddelandet.
Protokollsammansättning
Sammansättning med WS-adressering
WCF stöder två versioner av WS-Addressing: WS-Addressing 2004/08 [WS-ADDR] och W3C WS-Addressing 1.0 Rekommendationer [WS-ADDR-CORE] och [WS-ADDR-SOAP].
Även om WS-ReliableMessaging-specifikationen endast nämner WS-Addressing 2004/08, begränsar den inte den WS-Adresseringsversion som ska användas. Följande är en lista över begränsningar som gäller för WCF:
R2101: Både WS-Addressing 2004/08 och WS-Addressing 1.0 kan användas med WS-Reliable Messaging.
R2102: En enda version av WS-Addressing måste användas i en viss WS-ReliableMessaging-sekvens eller ett par converse-sekvenser som korreleras med hjälp av mekanismen
Offer
.
Sammansättning med SOAP
WCF stöder användning av både SOAP 1.1 och SOAP 1.2 med WS-Reliable Messaging.
Sammansättning med WS-Security och WS-SecureConversation
WCF ger skydd för WS-ReliableMessaging-sekvenser med hjälp av säker transport (HTTPS), komposition med WS-Security och komposition med WS-Secure Conversation. Protokollet WS-ReliableMessaging 1.1, WS-Security 1.1 och WS-Secure Conversation 1.3 bör användas tillsammans. Följande är en lista över begränsningar som gäller för WCF:
R2301: För att skydda integriteten i en WS-ReliableMessaging-sekvens utöver integriteten och konfidentialiteten för enskilda meddelanden kräver WCF att WS-Secure Conversation måste användas.
R2302:AWS-Secure Conversation-sessionen måste upprättas innan WS-ReliableMessaging-sekvenser upprättas.
R2303: Om WS-ReliableMessaging-sekvensens livslängd överskrider WS-Secure Conversation-sessionens livslängd måste den
SecurityContextToken
som upprättas med WS-Secure Conversation förnyas med hjälp av motsvarande WS-Secure Conversation Renewal-bindning.B2304:WS-ReliableMessaging-sekvens eller ett par korrelerade converse-sekvenser är alltid bundna till en enda WS-SecureConversation-session.
R2305: När den består av WS-Secure Conversation kräver WCF-svararen
CreateSequence
att meddelandet innehåller elementetwsse:SecurityTokenReference
ochwsrm:UsesSequenceSTR
huvudet.
Ett exempel på en UsesSequenceSTR
rubrik.
<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>
Sammansättning med SSL/TLS-sessioner
WCF stöder inte sammansättning med SSL/TLS-sessioner:
B2401: WCF genererar
wsrm:UsesSequenceSSL
inte huvudet.R2402: En reliable messaging-initierare får inte skicka ett
CreateSequence
meddelande med enwsrm:UsesSequenceSSL
rubrik till en WCF-svarare.
Sammansättning med WS-Policy
WCF stöder två versioner av WS-Policy: WS-Policy 1.2 och WS-Policy 1.5.
WS-ReliableMessaging WS-Policy-försäkran
WCF använder WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion
för att beskriva slutpunktsfunktioner. Följande är en lista över begränsningar som gäller för WCF:
B3001: WCF kopplar
wsrmn:RMAssertion
WS-Policy Assertion tillwsdl:binding
element. WCF stöder både bifogade filer tillwsdl:binding
ochwsdl:port
element.B3002: WCF genererar aldrig taggen
wsp:Optional
.B3003: Vid åtkomst till
wsrmp:RMAssertion
WS-Policy Assertion ignorerar WCF taggenwsp:Optional
och behandlar WS-RM-principen som obligatorisk.R3004: Eftersom WCF inte består av SSL/TLS-sessioner accepterar WCF inte en princip som anger
wsrmp:SequenceTransportSecurity
.B3005: WCF genererar alltid elementet
wsrmp:DeliveryAssurance
.B3006: WCF anger alltid leveransgarantin
wsrmp:ExactlyOnce
.B3007: WCF genererar och läser följande egenskaper för WS-ReliableMessaging-försäkran och ger kontroll över dem på WCF
ReliableSessionBindingElement
:netrmp:InactivityTimeout
netrmp:AcknowledgementInterval
Ett exempel på en
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>
WS-ReliableMessaging-tillägg för flödeskontroll
WCF använder WS-ReliableMessaging-utökningsbarhet för att ge ytterligare mer kontroll över sekvensmeddelandeflödet.
Flödeskontroll aktiveras genom att ställa in egenskapen på ReliableSessionBindingElement.FlowControlEnabledtrue
. Följande är en lista över begränsningar som gäller för WCF:
B4001: När Reliable Messaging Flow Control är aktiverat genererar WCF ett
netrm:BufferRemaining
element i elementets utökningsbarhet förSequenceAcknowledgement
rubriken, som du ser i följande exempel.<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: Även om Reliable Messaging Flow Control är aktiverat kräver WCF inte något
netrm:BufferRemaining
element iSequenceAcknowledgement
huvudet.B4003: WCF Reliable Messaging Destination använder
netrm:BufferRemaining
för att ange hur många nya meddelanden det kan buffring.B4004:När Reliable Messaging Flow Control är aktiverat använder WCF Reliable Messaging Source värdet för för att begränsa överföring av
netrm:BufferRemaining
meddelanden.B4005: WCF genererar heltalsvärden
netrm:BufferRemaining
mellan 0 och 4096 och läser heltalsvärden mellan 0 ochxs:int
'smaxInclusive
värde 214748364 inklusive.
Exchange-mönster för meddelanden
I det här avsnittet beskrivs WCF:s beteende när WS-ReliableMessaging används för olika Mönster för meddelandeutbyte. Följande två distributionsscenarier beaktas för varje Meddelandeutbytesmönster:
Initierare som inte kan adresseras: Initieraren finns bakom en brandvägg. Svararen kan endast leverera meddelanden till initieraren på HTTP-svar.
Adresserbar initierare: Initieraren och svararen kan båda skickas HTTP-begäranden. Med andra ord kan två omvända HTTP-anslutningar upprättas.
Enkelriktad, icke-adresserbar initierare
Bindning
WCF tillhandahåller ett enkelriktad meddelandeutbytesmönster med en sekvens över en HTTP-kanal. WCF använder HTTP-begäranden för att överföra alla meddelanden från initieraren till svararen och HTTP-svar för att överföra alla meddelanden från svararen till initieraren.
CreateSequence Exchange
WCF-initieraren skickar ett CreateSequence
meddelande utan Offer
element i en HTTP-begäran och förväntar sig meddelandet CreateSequenceResponse
på HTTP-svaret. WCF-svararen skapar en sekvens och skickar CreateSequenceResponse
meddelandet utan Accept
element i HTTP-svaret.
SequenceAcknowledgement
WCF-initieraren bearbetar bekräftelser på svaret för alla meddelanden förutom CreateSequence
meddelandet och felmeddelandena. WCF-svararen skickar alltid en fristående bekräftelse på HTTP-svaret till alla sekvenser och AckRequested
meddelanden.
CloseSequence Exchange
WCF-initieraren skickar ett CloseSequence
meddelande på en HTTP-begäran och förväntar sig CreateSequenceResponse
meddelandet på HTTP-svaret. WCF-svararen CloseSequenceResponse
skickar meddelandet på HTTP-svaret.
TerminateSequence Exchange
WCF-initieraren skickar ett TerminateSequence
meddelande på en HTTP-begäran och förväntar sig TerminateSequenceResponse
meddelandet på HTTP-svaret. WCF-svararen TerminateSequenceResponse
skickar meddelandet på HTTP-svaret.
One Way, adresserbar initierare
Bindning
WCF tillhandahåller ett enkelriktad meddelandeutbytesmönster med en sekvens över en inkommande och en utgående HTTP-kanal. WCF använder HTTP-begäranden för att överföra alla meddelanden. Alla HTTP-svar har en tom brödtext och HTTP 202-statuskod.
CreateSequence Exchange
WCF-initieraren skickar ett CreateSequence
meddelande utan Offer
element i en HTTP-begäran. WCF-svararen skapar en sekvens och skickar CreateSequenceResponse
meddelandet utan Accept
element på en HTTP-begäran.
Duplex, Adresserbar initierare
Bindning
WCF tillhandahåller ett helt asynkront, dubbelriktad meddelandeutbytesmönster med två sekvenser över en inkommande och en utgående HTTP-kanal. Det här mönstret för meddelandeutbyte kan blandas med Request/Reply
Addressable
, Initiator-mönstret för meddelandeutbyte på ett begränsat sätt. WCF använder HTTP-begäranden för att överföra alla meddelanden. Alla HTTP-svar har en tom brödtext och HTTP 202-statuskod.
CreateSequence Exchange
WCF-initieraren skickar ett CreateSequence
meddelande med ett Offer
element på en HTTP-begäran. WCF-svararen CreateSequence
ser till att har ett Offer
element, skapar sedan en sekvens och skickar CreateSequenceResponse
meddelandet med ett Accept
element.
Sekvenslivslängd
WCF behandlar de två sekvenserna som en helt dubbelsidig session.
När ett fel genereras som felar en sekvens förväntar sig WCF att fjärrslutpunkten ska fela båda sekvenserna. Vid läsning av ett fel som felar en sekvens felar WCF båda sekvenserna.
WCF kan stänga sin utgående sekvens och fortsätta bearbeta meddelanden på den inkommande sekvensen. Omvänt kan WCF bearbeta stängningen av den inkommande sekvensen och fortsätta att skicka meddelanden på dess utgående sekvens.
Begärandesvar och enkelriktad, icke-adresserbar initierare
Bindning
WCF tillhandahåller ett utbytesmönster för enkelriktade och begärandesvarsmeddelanden med två sekvenser över en HTTP-kanal. WCF använder HTTP-begäranden för att överföra alla meddelanden från initieraren till svararen och HTTP-svar för att överföra alla meddelanden från svararen till initieraren.
CreateSequence Exchange
WCF-initieraren skickar ett CreateSequence
meddelande med ett Offer
element på en HTTP-begäran och förväntar sig meddelandet CreateSequenceResponse
på HTTP-svaret. WCF-svararen skapar en sekvens och skickar CreateSequenceResponse
meddelandet med ett Accept
element i HTTP-svaret.
Enkelriktade meddelanden
För att slutföra ett enkelriktad meddelandeutbyte skickar WCF-initieraren ett meddelande om begärandesekvens på HTTP-begäran och tar emot ett fristående SequenceAcknowledgement
meddelande om HTTP-svaret. Måste SequenceAcknowledgement
bekräfta meddelandet som skickas.
WCF-svararen kan svara på begäran med en bekräftelse, ett fel eller ett svar med en tom brödtext och HTTP 202-statuskod.
Tvåvägsmeddelanden
För att slutföra ett exchange-protokoll för tvåvägsmeddelanden skickar WCF-initieraren ett meddelande om begärandesekvens på HTTP-begäran och tar emot ett svarssekvensmeddelande om HTTP-svaret. Svaret måste innehålla ett SequenceAcknowledgement
bekräftelsemeddelande om att begärandesekvensmeddelandet har överförts.
WCF-svararen kan svara på begäran med ett programsvar, ett fel eller ett svar med en tom brödtext och HTTP 202-statuskod.
På grund av förekomsten av enkelriktade meddelanden och tidpunkten för programsvar har sekvensnumret för begärandesekvensmeddelandet och svarsmeddelandets sekvensnummer ingen korrelation.
Försök svara igen
WCF förlitar sig på http-begäran-svar korrelation för tvåvägs meddelande exchange protokoll korrelation. På grund av detta slutar WCF-initieraren inte att försöka igen med ett sekvensmeddelande för begäran när begärandesekvensmeddelandet bekräftas, utan i stället när HTTP-svaret bär ett SequenceAcknowledgement
, programsvar eller fel. WCF-svararen försöker svara på HTTP-svaret för den begäran som svaret är korrelerat till.
CloseSequence Exchange
När du har fått alla svarssekvensmeddelanden och bekräftelser för alla envägsbegärandesekvensmeddelanden skickar WCF-initieraren ett CloseSequence
meddelande för begärandesekvensen på en HTTP-begäran och förväntar sig CloseSequenceResponse
http-svaret.
Om du stänger begärandesekvensen stängs svarssekvensen implicit. Det innebär att WCF-initieraren innehåller svarssekvensens Final SequenceAcknowledgement
på CloseSequence
meddelandet och att svarssekvensen inte har något CloseSequence
utbyte.
WCF-svararen ser till att alla svar bekräftas och skickar CloseSequenceResponse
meddelandet på HTTP-svaret.
TerminateSequence Exchange
När meddelandet har tagits emot CloseSequenceResponse
skickar WCF-initieraren ett TerminateSequence
meddelande för begärandesekvensen på en HTTP-begäran och förväntar sig TerminateSequenceResponse
http-svaret.
Precis som CloseSequence
utbytet avslutas svarssekvensen implicit genom att avsluta begärandesekvensen. Det innebär att WCF-initieraren innehåller svarssekvensens slut SequenceAcknowledgement
TerminateSequence
på meddelandet och att svarssekvensen inte har något TerminateSequence
utbyte.
WCF-svararen TerminateSequenceResponse
skickar meddelandet på HTTP-svaret.
Begäran/svar, adresserbar initierare
Bindning
WCF tillhandahåller ett exchange-mönster för begäran-svar-meddelanden med två sekvenser över en inkommande och en utgående HTTP-kanal. Det här mönstret för meddelandeutbyte kan blandas med Duplex, Addressable
initiatormönstret för meddelandeutbyte på ett begränsat sätt. WCF använder HTTP-begäranden för att överföra alla meddelanden. Alla HTTP-svar har en tom brödtext och HTTP 202-statuskod.
CreateSequence Exchange
WCF-initieraren skickar ett CreateSequence
meddelande med ett Offer
element på en HTTP-begäran. WCF-svararen CreateSequence
ser till att har ett Offer
element och sedan skapar en sekvens och skickar CreateSequenceResponse
meddelandet med ett Accept
element.
Korrelation mellan begäran och svar
Följande gäller för alla korrelerade begäranden och svar:
WCF ser till att alla programbegärandemeddelanden har en
ReplyTo
slutpunktsreferens och enMessageId
.WCF tillämpar den lokala slutpunktsreferensen som varje programbegärandemeddelandes
ReplyTo
. Den lokala slutpunktsreferensenCreateSequence
är meddelandetsReplyTo
för initieraren ochCreateSequence
meddelandetsTo
för svararen.WCF ser till att inkommande begärandemeddelanden har en
MessageId
och enReplyTo
.WCF säkerställer att slutpunktsreferensens
ReplyTo
URI för alla programbegärandemeddelanden matchar den lokala slutpunktsreferensen enligt definitionen tidigare.WCF ser till att alla svar har rätt
RelatesTo
To
och rubriker efterwsa
korrelationsregler för begäran/svar.