Reliable Messaging Protocol versie 1.1
In dit onderwerp vindt u informatie over de implementatie van Windows Communication Foundation (WCF) voor het WS-ReliableMessaging-protocol van februari 2007 (versie 1.1) dat nodig is voor interoperation met behulp van het HTTP-transport. WCF volgt de WS-ReliableMessaging-specificatie met de beperkingen en verduidelijkingen die in dit onderwerp worden uitgelegd. Houd er rekening mee dat het WS-ReliableMessaging-protocol versie 1.1 wordt geïmplementeerd vanaf .NET Framework 3.5.
Het WS-ReliableMessaging-protocol van februari 2007 wordt door de ReliableSessionBindingElementWCF geïmplementeerd.
Voor het gemak gebruikt het onderwerp de volgende rollen:
Initiator: de client die WS-Reliable Message-reeks maakt.
Responder: De service die de aanvragen van de initiator ontvangt.
In dit document worden de voorvoegsels en naamruimten in de volgende tabel gebruikt.
Voorvoegsel | Naamruimte |
---|---|
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 of WS-Policy 1.5) |
Berichten
Reeks maken
WCF implementeert CreateSequence
en CreateSequenceResponse
berichten om een betrouwbare berichtenreeks tot stand te brengen. De volgende beperkingen zijn van toepassing:
B1101: De WCF-initiator gebruikt dezelfde eindpuntreferentie als die van
ReplyTo
AcksTo
hetCreateSequence
bericht enOffer/Endpoint
.R1102: De
AcksTo
enReplyTo
Offer/Endpoint
eindpuntverwijzingen in hetCreateSequence
bericht moeten adreswaarden hebben met identieke tekenreeksweergaven, zodat ze overeenkomen met de octet.- De WCF Responder controleert of het URI-gedeelte van de
AcksTo
enReplyTo
Endpoint
eindpuntverwijzingen identiek zijn voordat een reeks wordt gemaakt.
- De WCF Responder controleert of het URI-gedeelte van de
R1103: De
AcksTo
ReplyTo
Offer/Endpoint
en eindpuntverwijzingen in hetCreateSequence
bericht moeten dezelfde set referentieparameters hebben.- WCF dwingt niet af, maar gaat ervan uit dat verwijzingsparameters van de
AcksTo
enReplyTo
Offer/Endpoint
eindpuntverwijzingenCreateSequence
identiek zijn en referentieparameters van deReplyTo
eindpuntverwijzing gebruiken voor bevestigingen en omgekeerde reeksberichten.
- WCF dwingt niet af, maar gaat ervan uit dat verwijzingsparameters van de
B1104: De WCF-initiator genereert niet het optionele
Expires
element ofOffer/Expires
element in hetCreateSequence
bericht.B1105: Bij het openen van het
CreateSequence
bericht gebruikt de WCF Responder deExpires
waarde in hetCreateSequence
element als deExpires
waarde in hetCreateSequenceResponse
element. Anders leest en negeert de WCF-responder deExpires
enOffer/Expires
waarden.B1106: Bij het openen van het
CreateSequenceResponse
bericht leest de WCF-initiator de optioneleExpires
waarde, maar gebruikt deze niet.B1107: De WCF-initiator en responder genereren altijd het optionele
IncompleteSequenceBehavior
element in deCreateSequence/Offer
enCreateSequenceResponse
elementen.B1108: WCF gebruikt alleen de
DiscardFollowingFirstGap
enNoDiscard
waarden in hetIncompleteSequenceBehavior
element.- WS-ReliableMessaging maakt gebruik van het
Offer
mechanisme om de twee omgekeerde gecorreleerde reeksen vast te stellen die een sessie vormen.
- WS-ReliableMessaging maakt gebruik van het
B1109: Als
CreateSequence
dit eenOffer
element bevat, weigert WCF Responder de aangeboden reeks door te reageren met eenCreateSequenceResponse
zonder elementAccept
.B1110: Als een Reliable Messaging Responder de aangeboden reeks weigert, krijgt de WCF-initiator een fout in de zojuist gevestigde reeks.
B1111: Als
CreateSequence
dit geen element bevatOffer
, weigert de wcf-beantwoorder in twee richtingen de aangeboden reeks door te reageren met eenCreateSequenceRefused
fout.R1112: Wanneer twee omgekeerde reeksen worden vastgesteld met behulp van het
Offer
mechanisme, moet de[address]
eigenschap van deCreateSequenceResponse/Accept/AcksTo
eindpuntreferentie overeenkomen met de doel-URI van deCreateSequence
bericht-byte voor byte.R1113: Wanneer er twee omgekeerde reeksen worden vastgesteld met behulp van het
Offer
mechanisme, moeten alle berichten in beide reeksen die van de initiator naar de responder stromen, naar dezelfde eindpuntverwijzing worden verzonden.
WCF maakt gebruik van WS-ReliableMessaging om betrouwbare sessies tot stand te brengen tussen de initiator en de responder. De WCF WS-ReliableMessaging-implementatie biedt een betrouwbare sessie voor eenrichtings-, aanvraag-antwoord- en full duplex-berichtpatronen. Met het WS-ReliableMessaging-mechanisme Offer
CreateSequence
CreateSequenceResponse
kunt u twee gecorreleerde omgekeerde reeksen tot stand brengen en een sessieprotocol bieden dat geschikt is voor alle berichteindpunten. Omdat WCF een beveiligingsgarantie biedt voor een dergelijke sessie, inclusief end-to-end-beveiliging voor sessie-integriteit, is het praktisch om ervoor te zorgen dat berichten die bedoeld zijn voor dezelfde partij op dezelfde bestemming aankomen. Hiermee kunt u ook 'piggy-backing' van reeksbevestigingen voor toepassingsberichten toestaan. Daarom zijn beperkingen R1102, R1112 en R1113 van toepassing op WCF.
Een voorbeeld van een CreateSequence
bericht.
<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>
Een voorbeeld van een CreateSequenceResponse
bericht.
<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>
Een reeks sluiten
WCF maakt gebruik van de CloseSequence
en CloseSequenceResponse
berichten voor een door reliable messaging-bron geïnitieerde afsluiting. De WCF Reliable Messaging-bestemming start het afsluiten niet en de WCF Reliable Messaging-bron biedt geen ondersteuning voor een door reliable messaging geïnitieerde afsluiting. De volgende beperkingen zijn van toepassing:
B1201: De WCF Reliable Messaging-bron verzendt altijd een
CloseSequence
bericht om de reeks af te sluiten.B1202: De reliable messaging-bron wacht op bevestiging van het volledige reeksbericht voordat het
CloseSequence
bericht wordt verzonden.B1203: De reliable messaging-bron bevat altijd het optionele
LastMsgNumber
element, tenzij de reeks geen berichten bevat.R1204: De Reliable Messaging-bestemming mag het afsluiten niet initiëren door een
CloseSequence
bericht te verzenden.B1205: Bij ontvangst van een
CloseSequence
bericht beschouwt de WCF Reliable Messaging-bron de reeks onvolledig en wordt een fout verzonden.
Een voorbeeld van een CloseSequence
bericht.
<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>
Voorbeeldbericht 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>
Sequentiebeëindiging
WCF gebruikt voornamelijk de TerminateSequence/TerminateSequenceResponse
handshake na het voltooien van de CloseSequence/CloseSequenceResponse
handshake. De WCF Reliable Messaging-bestemming initieert geen beëindiging en de Reliable Messaging-bron biedt geen ondersteuning voor een door reliable messaging geïnitieerde beëindiging. De volgende beperkingen zijn van toepassing:
B1301: De WCF-initiator verzendt
TerminateSequence
het bericht alleen na de geslaagde voltooiing van deCloseSequence/CloseSequenceResponse
handshake.R1302: WCF valideert dat het
LastMsgNumber
element consistent is voor alleCloseSequence
enTerminateSequence
berichten voor een bepaalde reeks. Dit betekent datLastMsgNumber
dit niet aanwezig is op alleCloseSequence
berichten ofTerminateSequence
dat het aanwezig is en identiek is aan alleCloseSequence
berichten enTerminateSequence
berichten.B1303: Bij ontvangst van een
TerminateSequence
bericht na deCloseSequence/CloseSequenceResponse
handshake reageert de Reliable Messaging-bestemming met eenTerminateSequenceResponse
bericht. Omdat de Reliable Messaging-bron de definitieve bevestiging heeft voordat hetTerminateSequence
bericht wordt verzonden, weet de Reliable Messaging-bestemming zonder twijfel dat de reeks eindigt en resources onmiddellijk vrijkomt.B1304: Bij ontvangst van een
TerminateSequence
bericht vóór deCloseSequence/CloseSequenceResponse
handshake reageert de WCF Reliable Messaging-bestemming met eenTerminateSequenceResponse
bericht. Als de Reliable Messaging-bestemming bepaalt dat er geen inconsistenties in de volgorde zijn, wacht de Reliable Messaging-bestemming op een door de toepassing opgegeven tijd voordat resources worden vrijgemaakt, zodat de client de kans krijgt om de definitieve bevestiging te ontvangen. Anders worden resources onmiddellijk vrijgemaakt door de Reliable Messaging-bestemming en wordt aangegeven aan de toepassingsbestemming dat de reeks met twijfel eindigt door de gebeurtenis op teFaulted
vragen.
Een voorbeeld van een TerminateSequence
bericht.
<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>
Voorbeeldbericht 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>
Reeksen
Hier volgt een lijst met beperkingen die van toepassing zijn op reeksen:
- B1401:WCF genereert en opent reeksnummers die niet hoger zijn dan
xs:long
de maximale inclusieve waarde, 9223372036854775807.
Een voorbeeld van een Sequence
koptekst.
<wsrm:Sequence s:mustUnderstand="1">
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:MessageNumber>1</wsrm:MessageNumber>
</wsrm:Sequence>
Bevestiging aanvragen
WCF gebruikt de AckRequested
header als een keep-alive-mechanisme.
Een voorbeeld van een AckRequested
koptekst.
<wsrm:AckRequested>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
</wsrm:AckRequested>
SequenceAcknowledgement
WCF maakt gebruik van een 'piggy-back'-mechanisme voor reeksbevestigingen die worden geleverd in WS-Reliable Messaging. De volgende beperkingen zijn van toepassing:
R1601: Wanneer er twee omgekeerde reeksen worden vastgesteld met behulp van het
Offer
mechanisme, kan deSequenceAcknowledgement
header worden opgenomen in elk toepassingsbericht dat naar de beoogde ontvanger wordt verzonden. Het externe eindpunt moet toegang hebben tot een piggybackedSequenceAcknowledgement
header.B1602: WCF genereert
SequenceAcknowledgement
geen headers die elementen bevattenNack
. WCF valideert dat elkNack
element een volgnummer bevat, maar negeert anders het element en deNack
waarde.
Een voorbeeld van een SequenceAcknowledgement
koptekst.
<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-fouten
Hier volgt een lijst met beperkingen die van toepassing zijn op de WCF-implementatie van WS-ReliableMessaging-fouten. De volgende beperkingen zijn van toepassing:
B1701: WCF genereert
MessageNumberRollover
geen fouten.B1702: Boven SOAP 1.2, wanneer het service-eindpunt de verbindingslimiet bereikt en geen nieuwe verbindingen kan verwerken, genereert WCF een geneste
CreateSequenceRefused
foutsubcode,netrm:ConnectionLimitReached
zoals wordt weergegeven in het volgende voorbeeld.
<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-adresseringsfouten
Omdat WS-ReliableMessaging gebruikmaakt van WS-Addressing, kan de WS-ReliableMessaging-implementatie WS-ReliableMessaging fouten genereren en verzenden. In deze sectie worden de WS-Adresseringsfouten behandeld die WCF expliciet genereert en verzendt op de WS-ReliableMessaging-laag:
B1801:WCF genereert en verzendt de
Message Addressing Header Required
fout wanneer een van de volgende waar is:Een
CreateSequence
ofCloseSequence
TerminateSequence
bericht ontbreekt in eenMessageId
koptekst.Een
CreateSequence
ofCloseSequence
TerminateSequence
bericht ontbreekt in eenReplyTo
koptekst.Een
CreateSequenceResponse
,CloseSequenceResponse
ofTerminateSequenceResponse
bericht ontbreekt in eenRelatesTo
koptekst.
B1802:WCF genereert en verzendt de
Endpoint Unavailable
fout om aan te geven dat er geen eindpunt luistert dat de volgorde kan verwerken op basis van het onderzoek van de adresseringsheaders in hetCreateSequence
bericht.
Protocolsamenstelling
Samenstelling met WS-Adressering
WCF ondersteunt twee versies van WS-Addressing: WS-Addressing 2004/08 [WS-ADDR] en W3C WS-Addressing 1.0 Aanbevelingen [WS-ADDR-CORE] en [WS-ADDR-SOAP].
Hoewel in de specificatie WS-ReliableMessaging alleen WS-Addressing 2004/08 wordt vermeld, wordt de WS-Adresseringsversie niet beperkt tot gebruik. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:
R2101: WS-Addressing 2004/08 en WS-Addressing 1.0 kunnen worden gebruikt met WS-Reliable Messaging.
R2102: Een enkele versie van WS-Addressing moet worden gebruikt in een bepaalde WS-ReliableMessaging-reeks of een paar omgekeerde reeksen die zijn gecorreleerd met behulp van het
Offer
mechanisme.
Samenstelling met SOAP
WCF ondersteunt het gebruik van zowel SOAP 1.1 als SOAP 1.2 met WS-Reliable Messaging.
Samenstelling met WS-Security en WS-SecureConversation
WCF biedt bescherming voor WS-ReliableMessaging-reeksen met behulp van secure Transport (HTTPS), samenstelling met WS-Security en samenstelling met WS-Secure Conversation. Het protocol WS-ReliableMessaging 1.1, WS-Security 1.1 en WS-Secure Conversation 1.3 moeten samen worden gebruikt. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:
R2301: Voor de bescherming van de integriteit van een WS-ReliableMessaging-reeks naast de integriteit en vertrouwelijkheid van afzonderlijke berichten, moet WS-Secure Conversation worden gebruikt.
R2302:AWS-Secure Conversation session moet tot stand worden gebracht voordat u WS-ReliableMessaging sequence(s) tot stand gebracht.
R2303: Als de levensduur van de WS-ReliableMessaging-reeks de levensduur van de WS-Secure-gesprekssessie overschrijdt, moet het
SecurityContextToken
bestaande gesprek met behulp van WS-Secure Conversation worden vernieuwd met behulp van de bijbehorende WS-Secure Conversation Renewal-binding.B2304:WS-ReliableMessaging-reeks of een paar gecorreleerde omgekeerde reeksen zijn altijd gebonden aan één WS-SecureConversation-sessie.
R2305: Wanneer het is samengesteld met WS-Secure Conversation, vereist de WCF-responder dat het
CreateSequence
bericht hetwsse:SecurityTokenReference
element en dewsrm:UsesSequenceSTR
header bevat.
Een voorbeeld van een UsesSequenceSTR
koptekst.
<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>
Samenstelling met SSL/TLS-sessies
WCF biedt geen ondersteuning voor samenstelling met SSL/TLS-sessies:
B2401: WCF genereert de
wsrm:UsesSequenceSSL
header niet.R2402: Een betrouwbare berichtinitiator mag geen bericht met een
wsrm:UsesSequenceSSL
koptekst verzendenCreateSequence
naar een WCF Responder.
Samenstelling met WS-Policy
WCF ondersteunt twee versies van WS-Policy: WS-Policy 1.2 en WS-Policy 1.5.
WS-ReliableMessaging WS-Policy Assertion
WCF maakt gebruik van WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion
om eindpuntmogelijkheden te beschrijven. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:
B3001: WCF koppelt
wsrmn:RMAssertion
WS-Policy Assertion aanwsdl:binding
elementen. WCF ondersteunt zowel bijlagen alswsdl:binding
wsdl:port
elementen.B3002: WCF genereert nooit de
wsp:Optional
tag.B3003: Bij toegang tot de
wsrmp:RMAssertion
WS-Policy Assertion negeert WCF dewsp:Optional
tag en behandelt het WS-RM-beleid als verplicht.R3004: Omdat WCF niet samenstelt met SSL/TLS-sessies, accepteert WCF geen beleid dat aangeeft
wsrmp:SequenceTransportSecurity
.B3005: WCF genereert altijd het
wsrmp:DeliveryAssurance
element.B3006: WCF geeft altijd de
wsrmp:ExactlyOnce
leveringsgarantie aan.B3007: WCF genereert en leest de volgende eigenschappen van de WS-ReliableMessaging-assertie en biedt controle over deze eigenschappen op de WCF
ReliableSessionBindingElement
:netrmp:InactivityTimeout
netrmp:AcknowledgementInterval
Een voorbeeld van een
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-extensie voor stroombeheer
WCF maakt gebruik van de uitbreidbaarheid van WS-ReliableMessaging om optionele extra strengere controle over de sequentieberichtstroom te bieden.
Stroombeheer is ingeschakeld door de ReliableSessionBindingElement.FlowControlEnabled eigenschap in te stellen op true
. Hier volgt een lijst met beperkingen die van toepassing zijn op WCF:
B4001: Wanneer Reliable Messaging Flow Control is ingeschakeld, genereert WCF een
netrm:BufferRemaining
element in de element-uitbreidbaarheid van deSequenceAcknowledgement
header, zoals wordt weergegeven in het volgende voorbeeld.<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: Zelfs wanneer Reliable Messaging Flow Control is ingeschakeld, heeft WCF geen element in de
SequenceAcknowledgement
header nodignetrm:BufferRemaining
.B4003: WCF Reliable Messaging Destination gebruikt
netrm:BufferRemaining
om aan te geven hoeveel nieuwe berichten het kan bufferen.B4004:Wanneer Reliable Messaging Flow Control is ingeschakeld, gebruikt de WCF Reliable Messaging Source de waarde van het beperken van
netrm:BufferRemaining
de berichtoverdracht.B4005: WCF genereert
netrm:BufferRemaining
gehele getallen tussen 0 en 4096 inclusief en leest gehele getallen tussen 0 enxs:int
'smaxInclusive
waarde 214748364 inclusief.
Berichtuitwisselingspatronen
In deze sectie wordt het gedrag van WCF beschreven wanneer WS-ReliableMessaging wordt gebruikt voor verschillende Berichtuitwisselingspatronen. Voor elk Message Exchange-patroon worden de volgende twee implementatiescenario's overwogen:
Niet-adresseerbare initiator: Initiator bevindt zich achter een firewall; Responder kan alleen berichten aan de initiator bezorgen op HTTP-antwoorden.
Adresseerbare initiator: initiator en responder kunnen beide HTTP-aanvragen verzenden; met andere woorden, twee omgekeerde HTTP-verbindingen kunnen tot stand worden gebracht.
Eenmalige, niet-adresseerbare initiator
Binding
WCF biedt een eenrichtingspatroon voor het uitwisselen van berichten met één reeks via één HTTP-kanaal. WCF gebruikt HTTP-aanvragen om alle berichten van de initiator te verzenden naar de responder en HTTP-antwoorden om alle berichten van de responder naar de initiator te verzenden.
CreateSequence Exchange
De WCF-initiator verzendt een CreateSequence
bericht zonder Offer
element in een HTTP-aanvraag en verwacht het CreateSequenceResponse
bericht op het HTTP-antwoord. De WCF Responder maakt een reeks en verzendt het CreateSequenceResponse
bericht zonder Accept
element in het HTTP-antwoord.
SequenceAcknowledgement
De WCF Initiator verwerkt bevestigingen voor het beantwoorden van alle berichten, met uitzondering van het bericht en de CreateSequence
foutberichten. De WCF Responder verzendt altijd een zelfstandige bevestiging op het HTTP-antwoord naar alle volgorde en AckRequested
berichten.
CloseSequence Exchange
De WCF-initiator verzendt een CloseSequence
bericht op een HTTP-aanvraag en verwacht het CreateSequenceResponse
bericht op het HTTP-antwoord. De WCF Responder verzendt het CloseSequenceResponse
bericht op het HTTP-antwoord.
TerminateSequence Exchange
De WCF-initiator verzendt een TerminateSequence
bericht op een HTTP-aanvraag en verwacht het TerminateSequenceResponse
bericht op het HTTP-antwoord. De WCF Responder verzendt het TerminateSequenceResponse
bericht op het HTTP-antwoord.
Eén manier, adresseerbare initiator
Binding
WCF biedt een eenrichtingspatroon voor het uitwisselen van berichten met één reeks via één binnenkomend en één uitgaand HTTP-kanaal. WCF gebruikt de HTTP-aanvragen om alle berichten te verzenden. Alle HTTP-antwoorden hebben een lege hoofdtekst en HTTP 202-statuscode.
CreateSequence Exchange
De WCF-initiator verzendt een CreateSequence
bericht zonder Offer
element in een HTTP-aanvraag. De WCF Responder maakt een reeks en verzendt het CreateSequenceResponse
bericht zonder Accept
element op een HTTP-aanvraag.
Duplex, adresseerbare initiator
Binding
WCF biedt een volledig asynchroon, tweerichtingsberichtuitwisselingspatroon met behulp van twee reeksen via één inkomend en één uitgaand HTTP-kanaal. Dit patroon voor het uitwisselen van berichten kan op een beperkte manier worden gecombineerd met het Request/Reply
Addressable
patroon voor berichtuitwisseling van initiators. WCF gebruikt HTTP-aanvragen om alle berichten te verzenden. Alle HTTP-antwoorden hebben een lege hoofdtekst en HTTP 202-statuscode.
CreateSequence Exchange
De WCF-initiator verzendt een CreateSequence
bericht met een Offer
element op een HTTP-aanvraag. De WCF Responder zorgt ervoor dat het CreateSequence
element een Offer
element heeft, maakt vervolgens een reeks en verzendt het CreateSequenceResponse
bericht met een Accept
element.
Levensduur van reeks
WCF behandelt de twee reeksen als één volledig dubbelzijdige sessie.
Bij het genereren van een fout die één reeks fouten aangeeft, verwacht WCF dat het externe eindpunt beide reeksen fouteert. Bij het lezen van een fout die één reeks fouten maakt, worden beide reeksen door WCF-fouten uitgevoerd.
WCF kan de uitgaande volgorde sluiten en berichten blijven verwerken op de binnenkomende volgorde. Omgekeerd kan WCF de sluiting van de inkomende reeks verwerken en berichten blijven verzenden op de uitgaande volgorde.
Aanvraag-antwoord en one-way, niet-adresseerbare initiator
Binding
WCF biedt een eenrichtings- en aanvraagantwoord-berichtuitwisselingspatroon met behulp van twee reeksen via één HTTP-kanaal. WCF gebruikt HTTP-aanvragen om alle berichten van de initiator te verzenden naar de responder en HTTP-antwoorden om alle berichten van de responder naar de initiator te verzenden.
CreateSequence Exchange
De WCF-initiator verzendt een CreateSequence
bericht met een Offer
element in een HTTP-aanvraag en verwacht het CreateSequenceResponse
bericht op het HTTP-antwoord. De WCF Responder maakt een reeks en verzendt het CreateSequenceResponse
bericht met een Accept
element in het HTTP-antwoord.
Eenrichtingsbericht
De WCF-initiator verzendt een aanvraagvolgordebericht op de HTTP-aanvraag en ontvangt een zelfstandig bericht op het HTTP-antwoord om een eenrichtingsbericht SequenceAcknowledgement
te voltooien. Het SequenceAcknowledgement
bericht moet worden bevestigd.
De WCF Responder kan reageren op de aanvraag met een bevestiging, een fout of een antwoord met een lege hoofdtekst en HTTP 202-statuscode.
Tweerichtingsberichten
De WCF-initiator verzendt een aanvraagvolgordebericht op de HTTP-aanvraag en ontvangt een antwoordreeksbericht op het HTTP-antwoord om een tweerichtingsuitwisselingsprotocol te voltooien. Het antwoord moet een SequenceAcknowledgement
bevestiging bevatten van het verzoekreeksbericht dat wordt verzonden.
De WCF Responder kan reageren op de aanvraag met een toepassingsantwoord, een fout of een antwoord met een lege hoofdtekst en HTTP 202-statuscode.
Vanwege de aanwezigheid van berichten in één richting en de timing van antwoorden van toepassingen, heeft het volgnummer van het aanvraagreeksbericht en het volgnummer van het antwoordbericht geen correlatie.
Antwoorden opnieuw proberen
WCF is afhankelijk van http-aanvraag-antwoordcorrelatie voor correlatie van tweerichtingsberichtenuitwisselingsprotocollen. Daarom stopt de WCF-initiator niet met het opnieuw proberen van een aanvraagreeksbericht wanneer het aanvraagvolgordebericht wordt bevestigd, maar in plaats daarvan wanneer het HTTP-antwoord een SequenceAcknowledgement
, toepassingsantwoord of fout bevat. De WCF Responder probeert antwoorden opnieuw uit te voeren op het HTTP-antwoord van de aanvraag waaraan het antwoord is gecorreleerd.
CloseSequence Exchange
Nadat alle antwoordenreeksberichten en bevestigingen voor alle aanvragenreeksberichten in één richting zijn ontvangen, verzendt de WCF-initiator een CloseSequence
bericht voor de aanvraagreeks op een HTTP-aanvraag en verwacht het CloseSequenceResponse
op het HTTP-antwoord.
Als u de aanvraagreeks sluit, wordt de antwoordvolgorde impliciet gesloten. Dit betekent dat de WCF-initiator de eindvolgorde SequenceAcknowledgement
van de antwoordreeks op het CloseSequence
bericht bevat en dat de antwoordvolgorde geen uitwisseling heeft CloseSequence
.
De WCF Responder zorgt ervoor dat alle antwoorden worden bevestigd en verzendt het CloseSequenceResponse
bericht op het HTTP-antwoord.
TerminateSequence Exchange
Nadat het CloseSequenceResponse
bericht is ontvangen, verzendt de WCF-initiator een TerminateSequence
bericht voor de aanvraagreeks op een HTTP-aanvraag en verwacht het TerminateSequenceResponse
op het HTTP-antwoord.
Net als bij de CloseSequence
uitwisseling beëindigt de aanvraagreeks impliciet de antwoordvolgorde. Dit betekent dat de WCF-initiator de definitieve SequenceAcknowledgement
antwoordvolgorde van het TerminateSequence
bericht bevat en dat de antwoordvolgorde geen uitwisseling heeft TerminateSequence
.
De WCF Responder verzendt het TerminateSequenceResponse
bericht op het HTTP-antwoord.
Aanvraag/antwoord, adresseerbare initiator
Binding
WCF biedt een patroon voor het uitwisselen van berichten met behulp van twee reeksen via één inkomend en één uitgaand HTTP-kanaal. Dit patroon voor het uitwisselen van berichten kan op een beperkte manier worden gecombineerd met het Duplex, Addressable
patroon berichtuitwisseling van initiators. WCF gebruikt de HTTP-aanvragen om alle berichten te verzenden. Alle HTTP-antwoorden hebben een lege hoofdtekst en HTTP 202-statuscode.
CreateSequence Exchange
De WCF-initiator verzendt een CreateSequence
bericht met een Offer
element op een HTTP-aanvraag. De WCF Responder zorgt ervoor dat het CreateSequence
element Offer
vervolgens een reeks maakt en het CreateSequenceResponse
bericht met een Accept
element verzendt.
Correlatie van aanvragen/antwoorden
Het volgende geldt voor alle gecorreleerde aanvragen en antwoorden:
WCF zorgt ervoor dat alle toepassingsaanvraagberichten een
ReplyTo
eindpuntreferentie en eenMessageId
.WCF past de referentie voor het lokale eindpunt toe als elk bericht van de toepassingsaanvraag
ReplyTo
. De lokale eindpuntreferentie is deCreateSequence
berichtenReplyTo
voor de initiator en hetCreateSequence
berichtTo
voor de responder.WCF zorgt ervoor dat binnenkomende aanvraagberichten een
MessageId
en eenReplyTo
.WCF zorgt ervoor dat de URI van de
ReplyTo
eindpuntreferentie van alle toepassingsaanvraagberichten overeenkomt met de lokale eindpuntreferentie zoals eerder is gedefinieerd.WCF zorgt ervoor dat alle antwoorden de juiste
RelatesTo
antwoorden hebben enTo
dat alle headers voldoen aan de regels voorwsa
aanvraag-/antwoordcorrelatie.