Reliable Messaging Protocol w wersji 1.0
W tym temacie opisano szczegóły implementacji programu Windows Communication Foundation (WCF) dotyczące protokołu WS-Reliable Messaging z lutego 2005 r. (wersja 1.0) niezbędnego do współdziałania przy użyciu transportu HTTP. Program WCF jest zgodny ze specyfikacją usługi WS-Reliable Messaging z ograniczeniami i wyjaśnieniami opisanymi w tym temacie. Pamiętaj, że protokół WS-ReliableMessaging w wersji 1.0 jest implementowany począwszy od systemu WinFX.
Protokół WS-Reliable Messaging z lutego 2005 r. jest implementowany w programie WCF przez program ReliableSessionBindingElement.
Dla wygody temat używa następujących ról:
Inicjator: klient, który inicjuje tworzenie sekwencji komunikatów niezawodnych WS
Osoba odpowiadająca: usługa, która odbiera żądania inicjatora
W tym dokumencie użyto prefiksów i przestrzeni nazw w poniższej tabeli.
Prefiks | Przestrzeń nazw |
---|---|
Wsrm | http://schemas.xmlsoap.org/ws/2005/02/rm |
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 |
Obsługa komunikatów
Sekwencja komunikatów o ustanowieniu
Program WCF implementuje CreateSequence
i CreateSequenceResponse
komunikaty w celu ustanowienia niezawodnej sekwencji komunikatów. Obowiązują następujące ograniczenia:
B1101: Inicjator WCF nie generuje opcjonalnego elementu Wygasa w
CreateSequence
komunikacie lub w przypadkach, gdyCreateSequence
komunikat zawieraOffer
element, opcjonalnyExpires
element w elemecieOffer
.B1102: Podczas uzyskiwania dostępu do komunikatu
CreateSequence
program WCFResponder
wysyła i odbiera obaExpires
elementy, jeśli istnieją, ale nie używa ich wartości.
Usługa WS-Reliable Messaging wprowadza Offer
mechanizm ustanawiania dwóch skorelowanych sekwencji, które tworzą sesję.
R1103: Jeśli
CreateSequence
zawieraOffer
element, osoba odpowiadająca na niezawodne komunikaty musi zaakceptować sekwencję i odpowiedzieć za pomocąCreateSequenceResponse
elementu zawierającegowsrm:Accept
element, tworząc dwie skorelowane sekwencje odwrotne lub odrzucićCreateSequence
żądanie.R1104:
SequenceAcknowledgement
i komunikaty aplikacji przepływające na odwrotnejReplyTo
sekwencji muszą być wysyłane do odwołania do punktu końcowego .CreateSequence
R1105:
AcksTo
iReplyTo
odwołania do punktu końcowego w elemencieCreateSequence
muszą mieć wartości adresów zgodne z oktetem-mądry.Obiekt odpowiadający WCF sprawdza, czy część
AcksTo
identyfikatora URI iReplyTo
epR są identyczne przed utworzeniem sekwencji.R1106:
AcksTo
odwołaniaReplyTo
do punktu końcowego w obiekcieCreateSequence
powinny mieć ten sam zestaw parametrów referencyjnych.WCF nie wymusza, ale zakłada, że [parametry referencyjne]
AcksTo
iReplyTo
włączoneCreateSequence
są identyczne i używają [parametrów referencyjnych] zReplyTo
odwołania do punktu końcowego do potwierdzenia i komunikatów sekwencji odwrotnych.R1107: Po ustanowieniu
Offer
dwóch sekwencji odwrotnych przy użyciu mechanizmu,SequenceAcknowledgement
a komunikaty aplikacji przepływające na odwrotnych sekwencjach muszą być wysyłane do odwołania doReplyTo
punktu końcowego obiektuCreateSequence
.R1108: Po ustanowieniu dwóch sekwencji odwrotnych przy użyciu mechanizmu
[address]
oferty właściwośćwsrm:AcksTo
elementuwsrm:Accept
podrzędnego Odwołanie punktu końcowego elementuCreateSequenceResponse
elementu musi być zgodna z bajtem docelowy identyfikator URICreateSequence
elementu .R1109: Po ustanowieniu
Offer
dwóch sekwencji odwrotnych przy użyciu mechanizmu komunikaty wysyłane przez inicjatora i potwierdzenia do komunikatów przez obiekt odpowiadający muszą być wysyłane do tego samego odwołania do punktu końcowego.Program WCF używa funkcji WS-Reliable Messaging do ustanawiania niezawodnych sesji między inicjatorem i obiektem odpowiadającym. Implementacja usługi WS-Reliable Messaging w programie WCF zapewnia niezawodną sesję dla jednokierunkowych, żądań i pełnych dwukierunkowych wzorców obsługi komunikatów. Mechanizm WS-Reliable Messaging
Offer
w systemieCreateSequence
/CreateSequenceResponse
umożliwia ustanowienie dwóch skorelowanych sekwencji odwrotnych i zapewnia protokół sesji odpowiedni dla wszystkich punktów końcowych komunikatów. Ponieważ program WCF zapewnia gwarancję bezpieczeństwa dla takiej sesji, w tym kompleksowej ochrony integralności sesji, praktyczne jest zapewnienie, że komunikaty przeznaczone dla tej samej strony docierają do tego samego miejsca docelowego. Umożliwia to również piggy-backing sekwencji potwierdzenia w komunikatach aplikacji. W związku z tym ograniczenia R1104, R1105 i R1108 mają zastosowanie do programu WCF.
Przykład komunikatu CreateSequence
.
<s:Envelope>
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequence
</a:Action>
<a:ReplyTo>
<a:Address>
http://Business456.com/clientA
</a:Address>
</a:ReplyTo>
<a:MessageID>
urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
</a:MessageID>
<a:To s:mustUnderstand="1">
http://Business456.com/clientA
</a: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:0afb8d36-bf26-4776-b8cf-8c91fddb5496
</wsrm:Identifier>
</wsrm:Offer>
</wsrm:CreateSequence>
</s:Body>
</s:Envelope>
Przykład komunikatu CreateSequenceResponse
.
<s:Envelope>
<s:Header>
<a:Action s:mustUnderstand="1">
http://schemas.xmlsoap.org/ws/2005/02/rm/CreateSequenceResponse
</a:Action>
<a:RelatesTo>
urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
</a:RelatesTo>
<a:To s:mustUnderstand="1">
http://Business456.com/clientA
</a:To>
</s:Header>
<s:Body>
<wsrm:CreateSequenceResponse>
<Identifier>
urn:uuid:eea0a36c-b38a-43e8-8c76-2fabe2d76386
</Identifier>
<Accept>
<AcksTo>
<a:Address>
http://BusinessABC.com/serviceA
</a:Address>
</AcksTo>
</Accept>
</wsrm:CreateSequenceResponse>
</s:Body>
</s:Envelope>
Sequence
Poniżej znajduje się lista ograniczeń, które mają zastosowanie do sekwencji:
B1201:WCF generuje i uzyskuje dostęp do numerów sekwencji nie wyższych niż
xs:long
maksymalna wartość inkluzywna, 9223372036854775807.B1202:WCF zawsze generuje ostatni komunikat o pustym ciele z identyfikatorem URI akcji .
http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage
B1203: Program WCF odbiera i dostarcza komunikat z nagłówkiem sekwencji zawierającym
LastMessage
element, o ile identyfikator URI akcji niehttp://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage
jest .
Przykład nagłówka sekwencji.
<wsrm:Sequence>
<wsrm:Identifier>
urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
</wsrm:Identifier>
<wsrm:MessageNumber>
10
</wsrm:MessageNumber>
<wsrm:LastMessage/>
</wsrm:Sequence>
Nagłówek AckRequested
WCF używa AckRequested
nagłówka jako mechanizmu utrzymania aktywności. Program WCF nie generuje opcjonalnego MessageNumber
elementu. Po otrzymaniu komunikatu z nagłówkiem zawierającym AckRequested
MessageNumber
element program WCF ignoruje MessageNumber
wartość elementu, jak pokazano w poniższym przykładzie.
<wsrm:AckRequested>
<wsrm:Identifier>
urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36
</wsrm:Identifier>
</wsrm:AckRequested>
Nagłówek SequenceAcknowledgement
WCF używa mechanizmu piggy-back na potrzeby potwierdzania sekwencji udostępnianych w usłudze WS-Reliable Messaging.
R1401: Po ustanowieniu
Offer
dwóch sekwencji odwrotnych przy użyciu mechanizmuSequenceAcknowledgement
nagłówek może zostać uwzględniony w każdym komunikacie aplikacji przesłanym do zamierzonego adresata.B1402: Gdy WCF musi wygenerować potwierdzenie przed odebraniem jakichkolwiek komunikatów sekwencji (na przykład w celu spełnienia komunikatu
AckRequested
), program WCF generujeSequenceAcknowledgement
nagłówek zawierający zakres od 0 do 0, jak pokazano w poniższym przykładzie.<wsrm:SequenceAcknowledgement> <wsrm:Identifier> urn:uuid:addabbbf-60cb-44d3-8c5b-9e0841629a36 </wsrm:Identifier> <wsrm:AcknowledgementRange Upper="0" Lower="0"/> </wsrm:SequenceAcknowledgement>
B1403: WCF nie generuje
SequenceAcknowledgement
nagłówków zawierających element,Nack
ale obsługujeNack
elementy.
Błędy WS-ReliableMessaging
Poniżej znajduje się lista ograniczeń, które mają zastosowanie do implementacji WCF błędów WS-Reliable Messaging:
B1501: Program WCF nie generuje
MessageNumberRollover
błędów.Punkt końcowy B1502:WCF może generować
CreateSequenceRefused
błędy zgodnie ze specyfikacją.B1503: Gdy punkt końcowy usługi osiągnie limit połączenia i nie może przetworzyć nowych połączeń, program WCF generuje dodatkowy
CreateSequenceRefused
kod podrzędny błędów,netrm:ConnectionLimitReached
jak pokazano w poniższym przykładzie.<s:Envelope> <s:Header> <wsa:Action> http://schemas.xmlsoap.org/ws/2005/08/addressing/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"> [Reason] </s:Text> </s:Reason> </s:Fault> </s:Body> </s:Envelope>
Błędy adresowania WS
Ponieważ usługa WS-Reliable Messaging używa adresowania WS, implementacja WCF WS-Reliable Messaging może generować błędy adresowania WS. W tej sekcji opisano błędy adresowania WS generowane jawnie przez usługę WCF w warstwie niezawodnej obsługi komunikatów WS:
B1601:WCF generuje nagłówek komunikatu o błędzie Wymagany, gdy jest spełniony jeden z następujących warunków:
Brak nagłówka i nagłówka
Sequence
komunikatuAction
.Brak
CreateSequence
nagłówka komunikatuMessageId
.Brak
CreateSequence
nagłówka komunikatuReplyTo
.
B1602:WCF generuje akcję błędu Nieobsługiwana w odpowiedzi na komunikat, który nie
Sequence
ma nagłówka i maAction
nagłówek, który nie jest rozpoznawany w specyfikacji niezawodnej obsługi komunikatów WS.B1603:WCF generuje punkt końcowy błędu Niedostępny, aby wskazać, że punkt końcowy nie przetwarza sekwencji na podstawie badania
CreateSequence
nagłówków adresowania komunikatu.
Kompozycja protokołu
Kompozycja z adresowania WS
Program WCF obsługuje dwie wersje adresowania WS: WS-Addressing 2004/08 [WS-ADDR] i W3C WS-Addressing 1.0 Rekomendacje [WS-ADDR-CORE] i [WS-ADDR-SOAP].
Chociaż specyfikacja WS-Reliable Messaging wspomina tylko WS-Addressing 2004/08, nie ogranicza wersji adresowania WS do użycia. Poniżej znajduje się lista ograniczeń, które mają zastosowanie do programu WCF:
R2101: Zarówno adresowanie WS-2004/08, jak i WS-Addressing 1.0 mogą być używane z obsługą niezawodnych komunikatów WS.
R2102: Pojedyncza wersja adresowania WS musi być używana w ramach danej sekwencji komunikatów niezawodnych WS lub pary sekwencji odwrotnych skorelowanych przy użyciu
wsrm:Offer
mechanizmu.
Kompozycja z soap
Program WCF obsługuje korzystanie zarówno z protokołu SOAP 1.1, jak i protokołu SOAP 1.2 z usługą WS-Reliable Messaging.
Kompozycja z zabezpieczeniami usług WS i WS-SecureConversation
Program WCF zapewnia ochronę sekwencji komunikatów niezawodnych WS przy użyciu bezpiecznego transportu (HTTPS), kompozycji z zabezpieczeniami WS-Security i kompozycji z funkcją WS-Secure Conversation. Poniżej znajduje się lista ograniczeń, które mają zastosowanie do programu WCF:
R2301: Aby chronić integralność sekwencji komunikatów niezawodnych WS oprócz integralności i poufności poszczególnych komunikatów, program WCF wymaga użycia bezpiecznej konwersacji WS.
R2302:Sesja konwersacji bezpiecznej na platformie AWS musi zostać ustanowiona przed ustanowieniem sekwencji komunikatów niezawodnych WS.
R2303: Jeśli okres istnienia sekwencji niezawodnej obsługi komunikatów WS przekracza okres istnienia sesji bezpiecznej konwersacji WS,
SecurityContextToken
ustanowiony przy użyciu bezpiecznej konwersacji WS musi zostać odnowiony przy użyciu odpowiedniego powiązania odnawiania konwersacji zabezpieczonej w usłudze WS.B2304: Sekwencja niezawodnej obsługi komunikatów WS lub para skorelowanych sekwencji odwrotnych jest zawsze powiązana z pojedynczą sesją WS-SecureConversation.
Źródło programu WCF generuje
wsse:SecurityTokenReference
element w sekcji rozszerzalności elementu komunikatuCreateSequence
.R2305: W przypadku skomponowania z funkcją konwersacji zabezpieczonej w programie WS komunikat
CreateSequence
musi zawieraćwsse:SecurityTokenReference
element .
WS-Reliable Messaging WS-Policy Assertion
WCF używa asercji wsrm:RMAssertion
WS-Reliable Messaging WS-Policy do opisywania możliwości punktów końcowych. Poniżej znajduje się lista ograniczeń, które mają zastosowanie do programu WCF:
B3001: Program WCF dołącza
wsrm:RMAssertion
asercji WS-Policy dowsdl:binding
elementów. Program WCF obsługuje zarówno załączniki, jakwsdl:binding
iwsdl:port
elementy.B3002: Program WCF obsługuje następujące opcjonalne właściwości asercji WS-Reliable Messaging i zapewnia kontrolę nad nimi w programie WCF
ReliableMessagingBindingElement
:wsrm:InactivityTimeout
wsrm:AcknowledgementInterval
Poniżej przedstawiono przykład.
<wsrm:RMAssertion> <wsrm:InactivityTimeout Milliseconds="600000" /> <wsrm:AcknowledgementInterval Milliseconds="200" /> </wsrm:RMAssertion>
Rozszerzenie niezawodnego obsługi komunikatów sterowania przepływem
WCF używa rozszerzalności komunikatów niezawodnych WS, aby zapewnić opcjonalną dodatkową ściślejszą kontrolę nad przepływem komunikatów sekwencji.
Sterowanie przepływem jest włączone przez ustawienie ReliableSessionBindingElement.FlowControlEnabled właściwości na true
. Poniżej znajduje się lista ograniczeń, które mają zastosowanie do programu WCF:
B4001: Po włączeniu niezawodnego sterowania przepływem obsługi komunikatów program WCF generuje
netrm:BufferRemaining
element w rozszerzalności elementu nagłówkaSequenceAcknowledgement
.B4002: Po włączeniu niezawodnego sterowania przepływem obsługi komunikatów program WCF nie wymaga
netrm:BufferRemaining
, aby element był obecny wSequenceAcknowledgement
nagłówku, jak pokazano w poniższym przykładzie.<wsrm:SequenceAcknowledgement> <wsrm:Identifier> http://fabrikam123.com/abc </wsrm:Identifier> <wsrm:AcknowledgementRange Upper="1" Lower="1"/> <netrm:BufferRemaining> 8 </netrm:BufferRemaining> </wsrm:SequenceAcknowledgement>
B4003: program WCF używa
netrm:BufferRemaining
funkcji , aby wskazać, ile nowych komunikatów może buforować miejsce docelowe usługi Reliable Messaging.B4004: Usługa WCF Reliable Messaging ogranicza liczbę komunikatów przesyłanych, gdy aplikacja docelowa Reliable Messaging nie może szybko odbierać komunikatów. Miejsce docelowe reliable messaging buforuje komunikaty, a wartość elementu spadnie do 0.
B4005: WCF generuje
netrm:BufferRemaining
wartości całkowite z zakresu od 0 do 4096 włącznie i odczytuje wartości całkowite z zakresu od 0 doxs:int
wartościmaxInclusive
214748364 włącznie.
Wzorce wymiany komunikatów
W tej sekcji opisano zachowanie programu WCF, gdy usługa WS-Reliable Messaging jest używana dla różnych wzorców wymiany komunikatów. Dla każdego wzorca wymiany komunikatów są brane pod uwagę następujące dwa scenariusze wdrażania:
Inicjator inny niż adresowalny: inicjator znajduje się za zaporą; Obiekt odpowiadający może dostarczać komunikaty do inicjatora tylko w odpowiedziach HTTP.
Adresowalny inicjator: inicjator i obiekt odpowiadający mogą wysyłać żądania HTTP; innymi słowy, można ustanowić dwa odwrotne połączenia HTTP.
Jednokierunkowy, nienależący do adresu inicjator
Wiązanie
WCF zapewnia jednokierunkowy wzorzec wymiany komunikatów przy użyciu jednej sekwencji za pośrednictwem jednego kanału HTTP. Program WCF używa żądań HTTP do przesyłania wszystkich komunikatów z usługi RMS do usługi RMD i odpowiedzi HTTP w celu przesyłania wszystkich komunikatów z usługi RMD do usługi RMS.
CreateSequence Exchange
Inicjator WCF generuje CreateSequence
komunikat bez oferty. Obiekt odpowiadający WCF zapewnia, CreateSequence
że nie ma oferty przed utworzeniem sekwencji. Obiekt odpowiadający WCF odpowiada na CreateSequence
żądanie z komunikatem CreateSequenceResponse
.
Sequenceacknowledgement
Inicjator WCF przetwarza potwierdzenia odpowiedzi wszystkich komunikatów z wyjątkiem komunikatów CreateSequence
i komunikatów o błędach. Odpowiedź WCF zawsze generuje autonomiczne potwierdzenie w odpowiedzi zarówno na sekwencję, jak i AckRequested
komunikaty.
Komunikat TerminateSequence
WCF traktuje TerminateSequence
jako jednokierunkową operację, co oznacza, że odpowiedź HTTP ma pustą treść i kod stanu HTTP 202.
Jeden ze sposobów, adresowalny inicjator
Wiązanie
Program WCF zapewnia jednokierunkowy wzorzec wymiany komunikatów przy użyciu jednej sekwencji dla ruchu przychodzącego i wychodzącego kanału HTTP. Program WCF używa żądań HTTP do przesyłania wszystkich komunikatów. Wszystkie odpowiedzi HTTP mają pustą treść i kod stanu HTTP 202.
CreateSequence Exchange
Inicjator WCF generuje CreateSequence
komunikat bez oferty. Obiekt odpowiadający WCF gwarantuje, że CreateSequence
nie ma oferty przed utworzeniem sekwencji. Obiekt odpowiadający WCF przesyła CreateSequenceResponse
komunikat w żądaniu HTTP adresowanym przy użyciu odwołania do punktu końcowego ReplyTo
.
Dwupoziomowy, adresowalny inicjator
Wiązanie
Program WCF zapewnia w pełni asynchroniczny wzorzec wymiany komunikatów dwukierunkowych przy użyciu dwóch sekwencji dla ruchu przychodzącego i wychodzącego kanału HTTP. Program WCF używa żądań HTTP do przesyłania wszystkich komunikatów. Wszystkie odpowiedzi HTTP mają pustą treść i kod stanu HTTP 202.
CreateSequence Exchange
Inicjator WCF generuje CreateSequence
komunikat z ofertą. Osoba odpowiadająca WCF gwarantuje, że oferta jest CreateSequence
oferowana przed utworzeniem sekwencji. Program WCF wysyła CreateSequenceResponse
żądanie HTTP skierowane do odwołania do punktu końcowegoCreateSequence
ReplyTo
.
Okres istnienia sekwencji
Program WCF traktuje dwie sekwencje jako jedną w pełni dwudupleksowej sesji.
Podczas generowania błędu, który uszkodzi jedną sekwencję, program WCF oczekuje, że zdalny punkt końcowy będzie uszkodzić obie sekwencje. Podczas odczytywania błędu, który uszkodzi jedną sekwencję, błędy WCF obie sekwencje.
Program WCF może zamknąć sekwencję ruchu wychodzącego i kontynuować przetwarzanie komunikatów w sekwencji ruchu przychodzącego. Z drugiej strony program WCF może przetworzyć zamknięcie sekwencji ruchu przychodzącego i kontynuować wysyłanie komunikatów w sekwencji ruchu wychodzącego.
Żądanie-odpowiedź, inicjator nienależący do adresu
Wiązanie
WCF zapewnia wzorzec wymiany komunikatów jednokierunkowych i żądań odpowiedzi przy użyciu dwóch sekwencji za pośrednictwem jednego kanału HTTP. Program WCF używa żądań HTTP do przesyłania komunikatów sekwencji żądań i używa odpowiedzi HTTP do przesyłania komunikatów sekwencji odpowiedzi.
CreateSequence Exchange
Inicjator WCF generuje CreateSequence
komunikat z ofertą. Osoba odpowiadająca WCF gwarantuje, że oferta jest CreateSequence
oferowana przed utworzeniem sekwencji. Obiekt odpowiadający WCF odpowiada na CreateSequence
żądanie z komunikatem CreateSequenceResponse
.
Jednokierunkowa wiadomość
Aby pomyślnie ukończyć jednokierunkowy protokół wymiany komunikatów, inicjator WCF przesyła komunikat sekwencji żądań w żądaniu HTTP i odbiera autonomiczny SequenceAcknowledgement
komunikat w odpowiedzi HTTP. Element SequenceAcknowledgement
musi potwierdzić przesłaną wiadomość.
Osoba odpowiadająca WCF może odpowiedzieć na żądanie z potwierdzeniem, błędem lub odpowiedzią z pustą treścią i kodem stanu HTTP 202.
Komunikaty dwukierunkowe
Aby pomyślnie ukończyć dwukierunkowy protokół wymiany komunikatów, inicjator WCF przesyła komunikat sekwencji żądań w żądaniu HTTP i odbiera komunikat sekwencji odpowiedzi w odpowiedzi HTTP. Odpowiedź musi zawierać SequenceAcknowledgement
potwierdzenie przesłanej wiadomości sekwencji żądań.
Osoba odpowiadająca WCF może odpowiedzieć na żądanie za pomocą odpowiedzi aplikacji, błędu lub odpowiedzi z pustą treścią i kodem stanu HTTP 202.
Ze względu na obecność komunikatów jednokierunkowych i chronometraż odpowiedzi aplikacji numer sekwencji żądań i numer sekwencji komunikatu odpowiedzi nie mają korelacji.
Ponów próbę odpowiedzi
WCF opiera się na korelacji http request-reply dla dwukierunkowej korelacji protokołu wymiany komunikatów. Z tego powodu inicjator WCF nie przestaje ponawiać próby komunikatu sekwencji żądań, gdy komunikat sekwencji żądań jest potwierdzany, ale raczej wtedy, gdy odpowiedź HTTP prowadzi potwierdzenie, komunikat użytkownika lub błąd. Obiekt odpowiadający WCF ponawia próbę odpowiedzi na nogę żądania HTTP żądania, do którego jest skorelowana odpowiedź.
LastMessage Exchange
Inicjator WCF generuje i przesyła pusty komunikat o ostatnim ciele na nodze żądania HTTP. Program WCF wymaga odpowiedzi, ale ignoruje rzeczywisty komunikat odpowiedzi. Obiekt odpowiadający WCF odpowiada na pustą wiadomość sekwencji żądań z ostatnią wiadomością z pustą wiadomością sekwencji odpowiedzi.
Jeśli obiekt odpowiadający WCF otrzyma ostatni komunikat, w którym identyfikator URI akcji nie http://schemas.xmlsoap.org/ws/2005/02/rm/LastMessage
jest , funkcja WCF odpowiada za pomocą ostatniego komunikatu. W przypadku dwukierunkowego protokołu wymiany komunikatów ostatni komunikat przenosi komunikat aplikacji; w przypadku jednokierunkowego protokołu wymiany komunikatów ostatnia wiadomość jest pusta.
Obiekt odpowiadający WCF nie wymaga potwierdzenia dla ostatniego komunikatu pustą sekwencję odpowiedzi.
TerminateSequence Exchange
Gdy wszystkie żądania otrzymały prawidłową odpowiedź, inicjator WCF generuje i przesyła komunikat sekwencji żądań TerminateSequence
w nodze żądania HTTP. Program WCF wymaga odpowiedzi, ale ignoruje rzeczywisty komunikat odpowiedzi. Obiekt odpowiadający WCF odpowiada na komunikat sekwencji żądań TerminateSequence
z komunikatem sekwencji TerminateSequence
odpowiedzi.
W normalnej sekwencji zamykania oba TerminateSequence
komunikaty niosą pełny zakres SequenceAcknowledgement
.
Żądanie/odpowiedź, adresowalny inicjator
Wiązanie
Program WCF udostępnia wzorzec wymiany komunikatów z odpowiedzią na żądanie przy użyciu dwóch sekwencji dla ruchu przychodzącego i wychodzącego kanału HTTP. Program WCF używa żądań HTTP do przesyłania wszystkich komunikatów. Wszystkie odpowiedzi HTTP mają pustą treść i kod stanu HTTP 202.
CreateSequence Exchange
Inicjator WCF generuje CreateSequence
komunikat z ofertą. Osoba odpowiadająca WCF gwarantuje, że oferta jest CreateSequence
oferowana przed utworzeniem sekwencji. Program WCF wysyła CreateSequenceResponse
żądanie HTTP skierowane do odwołania do punktu końcowegoCreateSequence
ReplyTo
.
Korelacja żądań/odpowiedzi
Inicjator WCF zapewnia, że wszystkie komunikaty żądań aplikacji mają MessageId
odwołanie do punktu końcowego ReplyTo
i . Inicjator WCF stosuje odwołanie do punktu końcowego komunikatu CreateSequence
ReplyTo
dla każdego komunikatu żądania aplikacji. Obiekt odpowiadający WCF wymaga, aby przychodzące komunikaty żądań nosiły MessageId
element ReplyTo
i . Obiekt odpowiadający WCF zapewnia, że identyfikator URI odwołania do punktu końcowego dla wszystkich CreateSequence
komunikatów żądań aplikacji i jest identyczny.