Omówienie sesji niezawodnych
Niezawodna obsługa komunikatów protokołu SOAP w programie Windows Communication Foundation (WCF) zapewnia kompleksową niezawodność transferu komunikatów między punktami końcowymi protokołu SOAP. Robi to w sieciach, które są zawodne przez pokonanie błędów transportu i błędów na poziomie komunikatów PROTOKOŁU SOAP. W szczególności zapewnia on dostarczanie na podstawie sesji, pojedynczej i (opcjonalnie) uporządkowanej dostawy dla komunikatów wysyłanych przez pośredników soap lub transportowych. Dostarczanie oparte na sesji zapewnia grupowanie komunikatów w sesji z opcjonalną kolejnością komunikatów.
W tym temacie opisano niezawodne sesje, sposób i czas ich używania oraz sposób ich zabezpieczania.
Niezawodne sesje programu WCF
Niezawodne sesje programu WCF to implementacja niezawodnej obsługi komunikatów protokołu SOAP zgodnie z definicją protokołu WS-ReliableMessaging.
Niezawodna obsługa komunikatów protokołu WCF SOAP zapewnia kompleksową niezawodną sesję między dwoma punktami końcowymi, niezależnie od liczby lub typu pośredników oddzielających punkty końcowe obsługi komunikatów. Obejmuje to wszystkich pośredników transportowych, które nie używają protokołu SOAP (na przykład serwerów proxy HTTP) ani pośredników korzystających z protokołu SOAP (na przykład routerów lub mostków opartych na protokole SOAP), które są wymagane do przepływu komunikatów między punktami końcowymi. Kanał niezawodnej sesji obsługuje komunikację interaktywną , dzięki czemu usługi połączone z takim kanałem działają współbieżnie i wymieniają i przetwarzają komunikaty w warunkach małych opóźnień, czyli w stosunkowo krótkich odstępach czasu. To sprzężenie oznacza, że te składniki wspólnie lub kończą się niepowodzeniem, więc między nimi nie ma izolacji.
Niezawodna sesja maskuje dwa rodzaje błędów:
Błędy na poziomie komunikatów protokołu SOAP, które obejmują utracone lub zduplikowane komunikaty i komunikaty, które docierają w innej kolejności niż kolejność ich wysyłania.
Błędy transportu.
Niezawodna sesja implementuje protokół WS-ReliableMessaging i okno transferu w pamięci w celu maskowania błędów na poziomie komunikatów protokołu SOAP i ponownego nawiązywania połączeń w przypadku awarii transportu.
Niezawodna sesja zapewnia komunikaty PROTOKOŁU SOAP, które udostępnia protokół TCP dla pakietów IP. Połączenie gniazda TCP zapewnia pojedynczy, uporządkowany transfer pakietów IP między węzłami. Niezawodny kanał zapewnia ten sam typ niezawodnego transferu, ale różni się od niezawodności gniazda TCP w następujący sposób:
Niezawodność jest na poziomie komunikatu PROTOKOŁU SOAP, a nie dla dowolnego rozmiaru pakietu bajtów.
Niezawodność jest neutralna pod względem transportu, a nie tylko do transferu za pośrednictwem protokołu TCP.
Niezawodność nie jest powiązana z określoną sesją transportu (na przykład sesja zapewnia połączenie TCP) i może używać wielu sesji transportu jednocześnie lub sekwencyjnie w okresie istnienia niezawodnej sesji.
Niezawodna sesja jest między punktami końcowymi protokołu SOAP nadawcy i odbiorcy, niezależnie od liczby połączeń transportowych wymaganych do połączenia między nimi. Krótko mówiąc, niezawodność protokołu TCP kończy się, gdy kończy się połączenie transportowe, podczas gdy niezawodna sesja zapewnia kompleksową niezawodność.
Niezawodne sesje i powiązania
Jak wspomniano wcześniej, niezawodna sesja jest neutralna w transporcie. Ponadto można ustanowić niezawodną sesję w wielu wzorcach wymiany komunikatów, takich jak żądanie-odpowiedź lub dupleks. Niezawodna sesja programu WCF jest uwidaczniona jako właściwość zestawu powiązań.
Użyj niezawodnej sesji w punktach końcowych, które używają:
Powiązania standardowe transportu oparte na protokole HTTP:
WsHttpBinding
i uwidaczniać kontrakty typu request-reply lub jednokierunkowe.W przypadku korzystania z niezawodnej sesji za pośrednictwem żądania i odpowiedzi lub prostego jednokierunkowego kontraktu usługi.
WsDualHttpBinding
i uwidaczniać kontrakty dwukierunkowe, żądanie-odpowiedź lub jednokierunkowe.WsFederationHttpBinding
i uwidaczniać kontrakty typu request-reply lub jednokierunkowe.
Powiązania standardowe transportu oparte na protokole TCP:
NetTcpBinding
i uwidaczniać dwukierunkowe, żądania odpowiedzi lub kontrakty jednokierunkowe.
Użyj niezawodnej sesji we wszystkich innych powiązaniach, tworząc powiązanie niestandardowe, takie jak HTTPS (aby uzyskać więcej informacji na temat problemów, zobacz Niezawodne sesje i zabezpieczenia) lub nazwane powiązanie potoku.
Istnieje możliwość stosu niezawodnej sesji na różnych typach kanałów bazowych, a wynikowy kształt kanału sesji jest różny. Zarówno na kliencie, jak i serwerze obsługiwany jest typ obsługiwanego kanału niezawodnej sesji, zależy od typu używanego kanału bazowego. W poniższej tabeli wymieniono typy kanałów sesji obsługiwanych na kliencie jako funkcję podstawowego typu kanału.
Obsługiwane typy kanałów sesji niezawodnej† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
Tak | Tak | Tak | Tak |
IRequestSessionChannel |
Tak | Tak | Nie. | Nie. |
IDuplexSessionChannel |
Nie. | Nie. | Tak | Tak |
† Obsługiwane typy kanałów to wartości dostępne dla ogólnej TChannel
wartości parametru przekazywanej BuildChannelFactory<TChannel>(BindingContext) do metody .
W poniższej tabeli wymieniono typy kanałów sesji obsługiwanych na serwerze jako funkcję bazowego typu kanału.
Obsługiwane niezawodne typy kanałów sesji* | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
Tak | Tak | Tak | Tak |
IReplySessionChannel |
Tak | Tak | Nie. | Nie. |
IDuplexSessionChannel |
Nie. | Nie. | Tak | Tak |
{Obsługiwane typy kanałów są wartościami dostępnymi dla ogólnej TChannel
wartości parametru przekazywanej BuildChannelListener<TChannel>(BindingContext) do metody.
Niezawodne sesje i zabezpieczenia
Zabezpieczanie niezawodnej sesji jest ważne, aby upewnić się, że komunikujące się strony (usługa i klient) są uwierzytelnione i że komunikaty wymieniane w sesji nie są modyfikowane. Ponadto ważne jest zapewnienie integralności każdej pojedynczej niezawodnej sesji. Niezawodna sesja jest zabezpieczona przez powiązanie go z kontekstem zabezpieczeń reprezentowanym i zarządzanym przez kanał sesji zabezpieczeń. Kanał zabezpieczeń zapewnia sesję zabezpieczeń. Tokeny zabezpieczające wymieniane podczas ustanawiania sesji są następnie używane do zabezpieczania komunikatów w niezawodnej sesji.
Gdy sesja niezawodna jest za pośrednictwem protokołu TCP-S, sesja TCP jest powiązana z niezawodną sesją. W związku z tym zabezpieczenia transportu zapewniają, że zabezpieczenia są również powiązane z niezawodną sesją. W takim przypadku ponowne ustanowienie połączenia jest wyłączone.
Jedynym wyjątkiem jest użycie protokołu HTTPS. Sesja Protokołu SSL (Secure Sockets Layer) nie jest powiązana z niezawodną sesją. Powoduje to zagrożenie, ponieważ sesje, które współużytkują kontekst zabezpieczeń (sesja SSL), nie są ze sobą chronione; może to być rzeczywiste zagrożenie w zależności od aplikacji.
Korzystanie z niezawodnych sesji
Aby użyć niezawodnych sesji programu WCF, utwórz punkt końcowy z powiązaniem obsługującym niezawodną sesję. Użyj jednego z powiązań dostarczonych przez system, które program WCF zapewnia z włączoną niezawodną sesją, lub utwórz własne powiązanie niestandardowe, które to robi.
Powiązania zdefiniowane przez system, które obsługują i umożliwiają domyślnie niezawodną sesję, obejmują:
Powiązania dostarczone przez system, które obsługują niezawodną sesję jako opcję, ale nie włączają ich domyślnie, obejmują:
Przykład tworzenia powiązania niestandardowego można znaleźć w temacie How to: Create a Custom Reliable Session Binding with HTTPS (Jak utworzyć niestandardowe powiązanie niezawodnej sesji przy użyciu protokołu HTTPS).
Aby zapoznać się z omówieniem powiązań programu WCF obsługujących niezawodne sesje, zobacz Powiązania dostarczone przez system.
Kiedy używać niezawodnych sesji
Ważne jest, aby zrozumieć, kiedy używać niezawodnych sesji w aplikacji. Program WCF obsługuje niezawodne sesje między punktami końcowymi, które są aktywne i aktywne w tym samym czasie. Jeśli aplikacja wymaga, aby jeden z punktów końcowych był niedostępny przez pewien czas, użyj kolejek, aby uzyskać niezawodność.
Jeśli scenariusz wymaga dwóch punktów końcowych połączonych za pośrednictwem protokołu TCP, protokół TCP może być wystarczający, aby zapewnić niezawodną wymianę komunikatów. Chociaż nie jest konieczne użycie niezawodnej sesji, ponieważ protokół TCP zapewnia, że pakiety są dostarczane w kolejności i tylko raz.
Jeśli twój scenariusz ma dowolną z następujących cech, należy poważnie rozważyć użycie niezawodnej sesji.
Pośrednicy SOAP, tacy jak routery SOAP
Pośrednicy pośrednicy lub mosty transportowe
Sporadyczne problemy z łącznością
Sesje za pośrednictwem protokołu HTTP