Reliable Messaging Protocol w wersji 1,1
W tym temacie opisano szczegóły implementacji programu Windows Communication Foundation (WCF) dotyczące protokołu WS-ReliableMessaging z lutego 2007 r. (wersja 1.1) niezbędnego do współdziałania przy użyciu transportu HTTP. Program WCF jest zgodny ze specyfikacją WS-ReliableMessaging z ograniczeniami i wyjaśnieniami opisanymi w tym temacie. Należy pamiętać, że protokół WS-ReliableMessaging w wersji 1.1 jest implementowany począwszy od programu .NET Framework 3.5.
Protokół WS-ReliableMessaging z lutego 2007 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://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 lub WS-Policy 1.5) |
Obsługa komunikatów
Tworzenie sekwencji
WCF implementuje CreateSequence
i CreateSequenceResponse
komunikaty w celu ustanowienia niezawodnej sekwencji komunikatów. Obowiązują następujące ograniczenia:
B1101: Inicjator WCF używa tego samego odwołania do punktu końcowego co
CreateSequence
komunikat iAcksTo
ReplyTo
Offer/Endpoint
.R1102:
AcksTo
ReplyTo
odwołania do punktu końcowego iOffer/Endpoint
wCreateSequence
komunikacie muszą mieć wartości adresów z identycznymi reprezentacjami ciągów, tak aby były zgodne z oktetem-wise.- Obiekt odpowiadający WCF sprawdza, czy część identyfikatora URI odwołań do
AcksTo
punktuReplyTo
końcowego i jestEndpoint
identyczna przed utworzeniem sekwencji.
- Obiekt odpowiadający WCF sprawdza, czy część identyfikatora URI odwołań do
R1103:
AcksTo
ReplyTo
odwołania do punktu końcowego iOffer/Endpoint
wCreateSequence
komunikacie powinny mieć ten sam zestaw parametrów odwołania.- Program WCF nie wymusza, ale zakłada, że parametry referencyjne odwołań do elementu i
Offer/Endpoint
punktu końcowego sąCreateSequence
identyczne i używają parametrówAcksTo
ReplyTo
odwołania zReplyTo
odwołania do punktu końcowego do potwierdzenia i komunikatów sekwencji odwrotnych.
- Program WCF nie wymusza, ale zakłada, że parametry referencyjne odwołań do elementu i
B1104: Inicjator WCF nie generuje opcjonalnego
Expires
lubOffer/Expires
elementu wCreateSequence
komunikacie.B1105: Podczas uzyskiwania dostępu do komunikatu
CreateSequence
funkcja odpowiadająca WCF używaExpires
wartości wCreateSequence
elemecie jakoExpires
wartości w elemecieCreateSequenceResponse
. W przeciwnym razie obiekt odpowiadający WCF odczytuje i ignorujeExpires
wartości iOffer/Expires
.B1106: Podczas uzyskiwania dostępu do komunikatu
CreateSequenceResponse
inicjator WCF odczytuje wartość opcjonalnąExpires
, ale nie używa jej.B1107: Inicjator i obiekt odpowiadający WCF zawsze generują opcjonalny
IncompleteSequenceBehavior
element w elementachCreateSequence/Offer
iCreateSequenceResponse
.B1108: WCF używa tylko
DiscardFollowingFirstGap
wartości iNoDiscard
w elemecieIncompleteSequenceBehavior
.- WS-ReliableMessaging wykorzystuje
Offer
mechanizm do ustanowienia dwóch skorelowanych sekwencji, które tworzą sesję.
- WS-ReliableMessaging wykorzystuje
B1109: Jeśli
CreateSequence
element zawiera element, jednokierunkowe odpowiedź WCF odrzuca oferowanąOffer
sekwencję, odpowiadającCreateSequenceResponse
bezAccept
elementu.B1110: Jeśli element odpowiadający reliable messaging odrzuca oferowaną sekwencję, inicjator WCF błędy nowo ustanowionej sekwencji.
B1111: Jeśli
CreateSequence
element nie zawieraOffer
elementu, dwukierunkowy obiekt odpowiadający WCF odrzuca oferowaną sekwencję, odpowiadając naCreateSequenceRefused
błąd.R1112: Po ustanowieniu
Offer
dwóch sekwencji odwrotnych przy użyciu mechanizmu[address]
właściwośćCreateSequenceResponse/Accept/AcksTo
odwołania do punktu końcowego musi być zgodna z docelowym identyfikatorem URI bajtu komunikatuCreateSequence
dla bajtu.R1113: Po ustanowieniu
Offer
dwóch sekwencji odwrotnych przy użyciu mechanizmu wszystkie komunikaty w obu sekwencjach przepływających z inicjatora do obiektu odpowiadającego muszą być wysyłane do tego samego odwołania do punktu końcowego.
WCF używa funkcji WS-ReliableMessaging do ustanawiania niezawodnych sesji między inicjatorem a obiektem odpowiadającym. Implementacja usługi WCF WS-ReliableMessaging zapewnia niezawodną sesję dla wzorców jednokierunkowych, żądań i pełnych dwukierunkowych komunikatów. Mechanizm WS-ReliableMessaging Offer
w systemie CreateSequence
i 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" potwierdzenia sekwencji komunikatów aplikacji. W związku z tym ograniczenia R1102, R1112 i R1113 mają zastosowanie do programu WCF.
Przykład komunikatu CreateSequence
.
<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>
Przykład komunikatu CreateSequenceResponse
.
<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>
Zamykanie sekwencji
Program WCF używa komunikatów CloseSequence
i CloseSequenceResponse
do zamknięcia zainicjowanego przez źródło usługi Reliable Messaging. Miejsce docelowe niezawodnej obsługi komunikatów programu WCF nie inicjuje zamknięcia, a źródło niezawodnej obsługi komunikatów WCF nie obsługuje zamknięcia zainicjowanego przez miejsce docelowe usługi Reliable Messaging. Obowiązują następujące ograniczenia:
B1201: Źródło niezawodnej obsługi komunikatów
CloseSequence
WCF zawsze wysyła komunikat, aby zamknąć sekwencję.B1202: Źródło reliable messaging czeka na potwierdzenie pełnego zakresu komunikatów sekwencji przed wysłaniem
CloseSequence
wiadomości.B1203: Źródło reliable messaging zawsze zawiera opcjonalny
LastMsgNumber
element, chyba że sekwencja nie zawiera komunikatów.R1204: Miejsce docelowe reliable messaging nie może zainicjować zamknięcia przez wysłanie komunikatu
CloseSequence
.B1205: Po otrzymaniu komunikatu
CloseSequence
źródło niezawodnej obsługi komunikatów programu WCF uznaje sekwencję za niekompletną i wysyła błąd.
Przykład komunikatu CloseSequence
.
<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>
Przykładowy CloseSequenceResponse
komunikat:
<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>
Zakończenie sekwencji
WCF używa TerminateSequence/TerminateSequenceResponse
przede wszystkim uzgadniania po zakończeniu CloseSequence/CloseSequenceResponse
uzgadniania. Miejsce docelowe niezawodnej obsługi komunikatów WCF nie inicjuje zakończenia, a źródło reliable messaging nie obsługuje zakończenia inicjowanego przez miejsce docelowe usługi Reliable Messaging. Obowiązują następujące ograniczenia:
B1301: Inicjator WCF wysyła
TerminateSequence
wiadomość tylko po pomyślnym zakończeniuCloseSequence/CloseSequenceResponse
uzgadniania.R1302: WCF sprawdza, czy
LastMsgNumber
element jest spójny we wszystkichCloseSequence
komunikatach iTerminateSequence
dla danej sekwencji. Oznacza to, żeLastMsgNumber
nie jest obecny na wszystkichCloseSequence
komunikatach iTerminateSequence
lub jest obecny i identyczny dla wszystkichCloseSequence
iTerminateSequence
komunikatów.B1303: Podczas odbierania komunikatu
TerminateSequence
CloseSequence/CloseSequenceResponse
po uścisku dłoni miejsce docelowe Reliable Messaging odpowiada komunikatemTerminateSequenceResponse
. Ponieważ źródło reliable messaging ma ostateczne potwierdzenie przed wysłaniem komunikatuTerminateSequence
, miejsce docelowe reliable messaging wie bez wątpienia, że sekwencja kończy się i natychmiast odzyskuje zasoby.B1304: Podczas odbierania komunikatu
TerminateSequence
przedCloseSequence/CloseSequenceResponse
uściskiem dłoni miejsce docelowe niezawodnej obsługi komunikatów programu WCF odpowiada komunikatemTerminateSequenceResponse
. Jeśli miejsce docelowe reliable messaging określi, że w sekwencji nie ma niespójności, miejsce docelowe reliable messaging czeka na określony czas docelowy aplikacji przed odzyskaniem zasobów, aby umożliwić klientowi uzyskanie ostatecznego potwierdzenia. W przeciwnym razie miejsce docelowe reliable messaging natychmiast odzyskuje zasoby i wskazuje na miejsce docelowe aplikacji, że sekwencja kończy się wątpliwości, podnoszącFaulted
zdarzenie.
Przykład komunikatu TerminateSequence
.
<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>
Przykładowy TerminateSequenceResponse
komunikat:
<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>
Sekwencje
Poniżej znajduje się lista ograniczeń, które mają zastosowanie do sekwencji:
- B1401:WCF generuje i uzyskuje dostęp do numerów sekwencji nie wyższych niż
xs:long
maksymalna wartość inkluzywna, 9223372036854775807.
Przykład nagłówka Sequence
.
<wsrm:Sequence s:mustUnderstand="1">
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:MessageNumber>1</wsrm:MessageNumber>
</wsrm:Sequence>
Potwierdzenie żądania
Program WCF używa nagłówka AckRequested
jako mechanizmu utrzymania aktywności.
Przykład nagłówka AckRequested
.
<wsrm:AckRequested>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
</wsrm:AckRequested>
Sequenceacknowledgement
WCF używa mechanizmu "piggy-back" do potwierdzania sekwencji udostępnianych w usłudze WS-Reliable Messaging. Obowiązują następujące ograniczenia:
R1601: Po ustanowieniu
Offer
dwóch sekwencji odwrotnych przy użyciu mechanizmuSequenceAcknowledgement
nagłówek może zostać dołączony do dowolnego komunikatu aplikacji przesłanego do zamierzonego adresata. Zdalny punkt końcowy musi mieć dostęp do nagłówka piggybackedSequenceAcknowledgement
.B1602: WCF nie generuje
SequenceAcknowledgement
nagłówków zawierającychNack
elementy. Program WCF sprawdza, czy każdyNack
element zawiera numer sekwencji, ale w przeciwnym razie ignorujeNack
element i wartość.
Przykład nagłówka SequenceAcknowledgement
.
<wsrm:SequenceAcknowledgement>
<wsrm:Identifier>urn:uuid:656652b8-9af2-4e94-9d07-2dc21c05ed27</wsrm:Identifier>
<wsrm:AcknowledgementRange Lower="1" Upper="1"></wsrm:AcknowledgementRange>
</wsrm:SequenceAcknowledgement>
Błędy WS-ReliableMessaging
Poniżej znajduje się lista ograniczeń, które mają zastosowanie do implementacji WCF błędów WS-ReliableMessaging. Obowiązują następujące ograniczenia:
B1701: Program WCF nie generuje
MessageNumberRollover
błędów.B1702: Za pośrednictwem protokołu SOAP 1.2, gdy punkt końcowy usługi osiągnie limit połączenia i nie może przetworzyć nowych połączeń, program WCF generuje zagnieżdżony
CreateSequenceRefused
kod podrzędny błędów,netrm:ConnectionLimitReached
jak pokazano w poniższym przykładzie.
<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>
Błędy adresowania WS
Ponieważ usługa WS-ReliableMessaging używa adresowania WS, implementacja usługi WCF WS-ReliableMessaging może generować i przesyłać błędy adresowania WS. W tej sekcji omówiono błędy adresowania WS, które program WCF jawnie generuje i przesyła w warstwie WS-ReliableMessaging:
B1801:WCF generuje i przesyła
Message Addressing Header Required
błąd, gdy jedna z następujących wartości jest prawdziwa:CloseSequence
BrakCreateSequence
nagłówka , lubTerminateSequence
komunikatuMessageId
.CloseSequence
BrakCreateSequence
nagłówka , lubTerminateSequence
komunikatuReplyTo
.W
CreateSequenceResponse
nagłówku brakuje nagłówkaRelatesTo
,CloseSequenceResponse
lubTerminateSequenceResponse
.
B1802:WCF generuje i przesyła
Endpoint Unavailable
błąd, aby wskazać, że nie ma punktu końcowego nasłuchiwania, który może przetwarzać sekwencję na podstawie badania nagłówków adresowania wCreateSequence
komunikacie.
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-ReliableMessaging 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 niezawodną obsługą komunikatów WS.
R2102: Pojedyncza wersja adresowania WS musi być używana w danej sekwencji WS-ReliableMessaging lub para sekwencji odwrotnych skorelowanych przy użyciu
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 obsługą niezawodnych komunikatów WS.
Kompozycja z zabezpieczeniami usług WS i WS-SecureConversation
Program WCF zapewnia ochronę sekwencji WS-ReliableMessaging przy użyciu bezpiecznego transportu (HTTPS), kompozycji z zabezpieczeniami WS-Security oraz kompozycji z funkcją WS-Secure Conversation. Protokół WS-ReliableMessaging 1.1, WS-Security 1.1 i WS-Secure Conversation 1.3 należy używać razem. Poniżej znajduje się lista ograniczeń, które mają zastosowanie do programu WCF:
R2301: Aby chronić integralność sekwencji WS-ReliableMessaging oprócz integralności i poufności poszczególnych wiadomości, program WCF wymaga użycia bezpiecznej konwersacji WS.
R2302: Przed ustanowieniem sekwencji WS-ReliableMessaging należy ustanowić sesję bezpiecznej konwersacji na platformie AWS.
R2303: Jeśli okres istnienia sekwencji WS-ReliableMessaging przekracza okres istnienia sesji konwersacji zabezpieczonej w programie WS,
SecurityContextToken
ustanowiony przy użyciu bezpiecznej konwersacji WS musi zostać odnowiony przy użyciu odpowiedniego powiązania odnawiania konwersacji zabezpieczonej w systemie WS.B2304:Sekwencja WS-ReliableMessaging lub para skorelowanych sekwencji odwrotnych jest zawsze powiązana z pojedynczą sesją WS-SecureConversation.
R2305: W przypadku skomponowania się z funkcją WS-Secure Conversation osoba odpowiadająca WCF wymaga, aby
CreateSequence
komunikat zawierałwsse:SecurityTokenReference
element iwsrm:UsesSequenceSTR
nagłówek.
Przykład nagłówka UsesSequenceSTR
.
<wsrm:UsesSequenceSTR></wsrm:UsesSequenceSTR>
Kompozycja z sesjami SSL/TLS
Program WCF nie obsługuje kompozycji z sesjami SSL/TLS:
B2401: WCF nie generuje nagłówka
wsrm:UsesSequenceSSL
.R2402: Inicjator niezawodnej obsługi komunikatów nie może wysyłać
CreateSequence
komunikatu z nagłówkiem do obiektu odpowiadającegowsrm:UsesSequenceSSL
WCF.
Kompozycja z usługą WS-Policy
Program WCF obsługuje dwie wersje usług WS-Policy: WS-Policy 1.2 i WS-Policy 1.5.
WS-ReliableMessaging WS-Policy Assertion
WCF używa funkcji WS-ReliableMessaging WS-Policy Assertion wsrm:RMAssertion
do opisania 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
wsrmn:RMAssertion
asercji WS-Policy dowsdl:binding
elementów. Program WCF obsługuje zarówno załączniki, jakwsdl:binding
iwsdl:port
elementy.B3002: WCF nigdy nie generuje tagu
wsp:Optional
.B3003: Podczas uzyskiwania
wsrmp:RMAssertion
dostępu do asercji WS-Policy program WCF ignorujewsp:Optional
tag i traktuje zasady WS-RM jako obowiązkowe.R3004: Ponieważ program WCF nie komponuje się z sesjami ssl/TLS, program WCF nie akceptuje zasad określających
wsrmp:SequenceTransportSecurity
wartość .B3005: Program WCF zawsze generuje
wsrmp:DeliveryAssurance
element.B3006: WCF zawsze określa
wsrmp:ExactlyOnce
gwarancję dostarczania.B3007: Program WCF generuje i odczytuje następujące właściwości asercji WS-ReliableMessaging i zapewnia kontrolę nad nimi w programie WCF
ReliableSessionBindingElement
:netrmp:InactivityTimeout
netrmp:AcknowledgementInterval
Przykład obiektu
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>
Rozszerzenie WS-ReliableMessaging sterowania przepływem
WCF używa rozszerzalności WS-ReliableMessaging, 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
, jak pokazano w poniższym przykładzie.<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: Nawet w przypadku włączenia kontrolki przepływu niezawodnej obsługi komunikatów program WCF nie wymaga
netrm:BufferRemaining
elementu w nagłówkuSequenceAcknowledgement
.B4003: WCF Reliable Messaging Destination używa
netrm:BufferRemaining
metody , aby wskazać, ile nowych komunikatów może buforować.B4004:Po włączeniu niezawodnego sterowania przepływem obsługi komunikatów źródło niezawodnej obsługi komunikatów używa wartości do ograniczania transmisji komunikatów
netrm:BufferRemaining
.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 funkcja WS-ReliableMessaging 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ą; Osoba odpowiadająca 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 inicjatora do obiektu odpowiadającego i odpowiedzi HTTP w celu przesłania wszystkich komunikatów z obiektu odpowiadającego do inicjatora.
CreateSequence Exchange
Inicjator WCF przesyła CreateSequence
komunikat bez Offer
elementu w żądaniu HTTP i oczekuje komunikatu CreateSequenceResponse
w odpowiedzi HTTP. Obiekt odpowiadający WCF tworzy sekwencję i przesyła CreateSequenceResponse
komunikat bez Accept
elementu w odpowiedzi HTTP.
Sequenceacknowledgement
Inicjator WCF przetwarza potwierdzenia odpowiedzi wszystkich komunikatów z wyjątkiem komunikatów CreateSequence
i komunikatów o błędach. Obiekt odpowiadający WCF zawsze przesyła autonomiczne potwierdzenie odpowiedzi HTTP do wszystkich sekwencji i AckRequested
komunikatów.
CloseSequence Exchange
Inicjator WCF przesyła CloseSequence
komunikat w żądaniu HTTP i oczekuje CreateSequenceResponse
komunikatu w odpowiedzi HTTP. Obiekt odpowiadający WCF przesyła CloseSequenceResponse
komunikat w odpowiedzi HTTP.
TerminateSequence Exchange
Inicjator WCF przesyła TerminateSequence
komunikat w żądaniu HTTP i oczekuje TerminateSequenceResponse
komunikatu w odpowiedzi HTTP. Obiekt odpowiadający WCF przesyła TerminateSequenceResponse
komunikat w odpowiedzi HTTP.
Jeden ze sposobów, adresowalny inicjator
Wiązanie
Program WCF zapewnia jednokierunkowy wzorzec wymiany komunikatów przy użyciu jednej sekwencji przez jeden przychodzący i jeden wychodzący kanał 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 przesyła CreateSequence
komunikat bez Offer
elementu w żądaniu HTTP. Obiekt odpowiadający WCF tworzy sekwencję i przesyła CreateSequenceResponse
komunikat bez Accept
elementu w żądaniu HTTP.
Dwupoziomowy, adresowalny inicjator
Wiązanie
WCF zapewnia w pełni asynchroniczny, dwukierunkowy wzorzec wymiany komunikatów przy użyciu dwóch sekwencji za pośrednictwem jednego przychodzącego i jednego wychodzącego kanału HTTP. Ten wzorzec wymiany komunikatów może być mieszany ze wzorcem wymiany komunikatów Request/Reply
Addressable
inicjatora w ograniczony sposób. 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 przesyła CreateSequence
komunikat z elementem Offer
w żądaniu HTTP. Obiekt odpowiadający WCF gwarantuje, że CreateSequence
element zawiera Offer
element, a następnie tworzy sekwencję i przesyła CreateSequenceResponse
komunikat za pomocą Accept
elementu.
Okres istnienia sekwencji
Program WCF traktuje dwie sekwencje jako jedną w pełni dwudupleksową sesję.
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.
Request-Reply and One-Way, Non-Addressable Initiator
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 wszystkich komunikatów z inicjatora do obiektu odpowiadającego i odpowiedzi HTTP w celu przesłania wszystkich komunikatów z obiektu odpowiadającego do inicjatora.
CreateSequence Exchange
Inicjator WCF przesyła CreateSequence
komunikat z elementem Offer
żądania HTTP i oczekuje komunikatu CreateSequenceResponse
w odpowiedzi HTTP. Obiekt odpowiadający WCF tworzy sekwencję i przesyła CreateSequenceResponse
komunikat za pomocą Accept
elementu w odpowiedzi HTTP.
Jednokierunkowa wiadomość
Aby pomyślnie ukończyć jednokierunkową wymianę 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. W związku z tym inicjator WCF nie przestaje ponawiać próby komunikatu sekwencji żądań, gdy komunikat sekwencji żądań jest potwierdzany, ale raczej wtedy, gdy odpowiedź HTTP prowadzi SequenceAcknowledgement
, odpowiedź aplikacji lub błąd. Obiekt odpowiadający WCF ponawia próbę odpowiedzi na odpowiedź HTTP żądania, do którego jest skorelowana odpowiedź.
CloseSequence Exchange
Po otrzymaniu wszystkich komunikatów sekwencji odpowiedzi i potwierdzenia dla wszystkich komunikatów sekwencji żądań w jeden sposób inicjator WCF przesyła CloseSequence
komunikat dla sekwencji żądań w żądaniu HTTP i oczekuje CloseSequenceResponse
odpowiedzi HTTP.
Zamknięcie sekwencji żądań niejawnie zamyka sekwencję odpowiedzi. Oznacza to, że inicjator WCF zawiera finale sekwencji SequenceAcknowledgement
odpowiedzi w CloseSequence
wiadomości, a sekwencja odpowiedzi nie ma CloseSequence
wymiany.
Obiekt odpowiadający WCF zapewnia, że wszystkie odpowiedzi są potwierdzane i przesyłają CloseSequenceResponse
komunikat w odpowiedzi HTTP.
TerminateSequence Exchange
Po otrzymaniu komunikatu CloseSequenceResponse
inicjator WCF przesyła TerminateSequence
komunikat dla sekwencji żądań w żądaniu HTTP i oczekuje TerminateSequenceResponse
odpowiedzi HTTP.
Podobnie jak w przypadku CloseSequence
wymiany, niejawne zakończenie sekwencji żądań powoduje zakończenie sekwencji odpowiedzi. Oznacza to, że inicjator WCF zawiera końcowy SequenceAcknowledgement
sekwencję odpowiedzi w TerminateSequence
wiadomości, a sekwencja odpowiedzi nie ma TerminateSequence
wymiany.
Obiekt odpowiadający WCF przesyła TerminateSequenceResponse
komunikat w odpowiedzi HTTP.
Żądanie/odpowiedź, adresowalny inicjator
Wiązanie
Program WCF udostępnia wzorzec wymiany komunikatów z odpowiedzią na żądanie przy użyciu dwóch sekwencji za pośrednictwem jednego ruchu przychodzącego i jednego wychodzącego kanału HTTP. Ten wzorzec wymiany komunikatów może być mieszany ze Duplex, Addressable
wzorcem wymiany komunikatów inicjatora w ograniczony sposób. 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 przesyła CreateSequence
komunikat z elementem Offer
w żądaniu HTTP. Obiekt odpowiadający WCF gwarantuje, że CreateSequence
element zawiera Offer
element, a następnie tworzy sekwencję i przesyła CreateSequenceResponse
komunikat za pomocą Accept
elementu.
Korelacja żądań/odpowiedzi
Następujące elementy dotyczą wszystkich skorelowanych żądań i odpowiedzi:
Usługa WCF zapewnia, że wszystkie komunikaty żądań aplikacji mają
ReplyTo
odwołanie do punktu końcowegoMessageId
i .Program WCF stosuje odwołanie do lokalnego punktu końcowego jako komunikat
ReplyTo
żądania każdej aplikacji. Odwołanie doCreateSequence
lokalnego punktu końcowego jest komunikatemReplyTo
dla inicjatora i komunikatuCreateSequence
To
dla obiektu odpowiadającego.Usługa WCF zapewnia, że przychodzące komunikaty żądań mają element
MessageId
iReplyTo
.Program WCF zapewnia, że
ReplyTo
identyfikator URI odwołania do punktu końcowego wszystkich komunikatów żądań aplikacji jest zgodny z lokalnym odwołaniem do punktu końcowego zgodnie z definicją wcześniej.Program WCF zapewnia, że wszystkie odpowiedzi mają poprawne
RelatesTo
nagłówki iTo
następującewsa
reguły korelacji żądań/odpowiedzi.