Overzicht van betrouwbare sessies
Windows Communication Foundation (WCF) SOAP Reliable Messaging biedt end-to-end berichtoverdracht betrouwbaarheid tussen SOAP-eindpunten. Dit gebeurt op netwerken die onbetrouwbaar zijn door transportfouten en SOAP-berichtniveaufouten te overwinnen. Het biedt met name sessiegebaseerde, enkelvoudige en (optioneel) bestelde bezorging voor berichten die worden verzonden via SOAP of transporttussenpersonen. Bezorging op basis van een sessie biedt het groeperen van berichten in een sessie met optionele volgorde van de berichten.
In dit onderwerp worden betrouwbare sessies beschreven, hoe en wanneer ze moeten worden gebruikt en hoe u ze kunt beveiligen.
Betrouwbare WCF-sessies
WCF betrouwbare sessies is een implementatie van SOAP reliable messaging zoals gedefinieerd door het WS-ReliableMessaging-protocol.
WCF SOAP reliable messaging biedt een end-to-end betrouwbare sessie tussen twee eindpunten, ongeacht het aantal of het type tussenpersonen dat de berichteneindpunten scheidt. Dit omvat alle tussenpersonen die geen SOAP (bijvoorbeeld HTTP-proxy's) of tussenpersonen gebruiken die SOAP (bijvoorbeeld SOAP-routers of bruggen) gebruiken die nodig zijn om berichten tussen de eindpunten te laten stromen. Een betrouwbaar sessiekanaal biedt ondersteuning voor interactieve communicatie, zodat de services die zijn verbonden door een dergelijk kanaal gelijktijdig worden uitgevoerd en berichten worden uitgewisseld en verwerkt onder lage latentie, dat wil gezegd binnen relatief korte tijdsintervallen. Deze koppeling betekent dat deze onderdelen samen vooruitgang boeken of samen mislukken, dus er is geen isolatie tussen deze onderdelen.
Een betrouwbare sessie maskert twee soorten fouten:
SOAP-fouten op berichtniveau, waaronder verloren of gedupliceerde berichten en berichten die in een andere volgorde binnenkomen dan de volgorde waarin ze zijn verzonden.
Transportfouten.
Een betrouwbare sessie implementeert het WS-ReliableMessaging-protocol en een in-memory overdrachtsvenster om FOUTEN op SOAP-berichtniveau te maskeren en verbindingen tot stand te brengen in het geval van transportfouten.
Een betrouwbare sessie biedt SOAP-berichten wat TCP biedt voor IP-pakketten. Een TCP-socketverbinding biedt een enkelvoudige overdracht van IP-pakketten tussen knooppunten in volgorde. Het betrouwbare kanaal biedt hetzelfde type betrouwbare overdracht, maar verschilt op de volgende manieren van TCP-socketbetrouwbaarheid:
De betrouwbaarheid is op soap-berichtniveau, niet voor een willekeurig pakket met bytes.
De betrouwbaarheid is transportneutraal, niet alleen voor overdracht via TCP.
De betrouwbaarheid is niet gekoppeld aan een bepaalde transportsessie (bijvoorbeeld de sessie die een TCP-verbinding biedt) en kan meerdere transportsessies gelijktijdig of opeenvolgend gebruiken gedurende de levensduur van de betrouwbare sessie.
De betrouwbare sessie bevindt zich tussen de SOAP-eindpunten van de afzender en de ontvanger, ongeacht het aantal transportverbindingen dat nodig is voor connectiviteit tussen deze verbindingen. Kortom, TCP-betrouwbaarheid eindigt waar de transportverbinding eindigt, terwijl een betrouwbare sessie end-to-end betrouwbaarheid biedt.
Betrouwbare sessies en bindingen
Zoals eerder vermeld, is een betrouwbare sessie transportneutraal. U kunt ook een betrouwbare sessie tot stand brengen via veel berichtuitwisselingspatronen, zoals aanvraag-antwoord of duplex. Een betrouwbare WCF-sessie wordt weergegeven als een eigenschap van een set bindingen.
Gebruik een betrouwbare sessie op eindpunten die gebruikmaken van:
Op HTTP gebaseerde transportstandaardbindingen:
WsHttpBinding
en stel aanvraag-antwoord- of eenrichtingscontracten beschikbaar.Wanneer u een betrouwbare sessie gebruikt via een aanvraag-antwoord of eenvoudig eenrichtingsservicecontract.
WsDualHttpBinding
en dubbelzijdige, aanvraag-antwoord- of eenrichtingscontracten beschikbaar maken.WsFederationHttpBinding
en stel aanvraag-antwoord- of eenrichtingscontracten beschikbaar.
Op TCP gebaseerde transportstandaardbindingen:
NetTcpBinding
en maak dubbelzijdige, aanvraagantwoorden of eenrichtingscontracten beschikbaar.
Gebruik een betrouwbare sessie op andere bindingen door een aangepaste binding te maken, zoals HTTPS (zie Betrouwbare sessies en beveiliging) of een benoemde pijpbinding voor meer informatie over problemen.
U kunt een betrouwbare sessie stapelen op verschillende onderliggende kanaaltypen en de resulterende betrouwbare sessiekanaalvorm varieert. Op zowel de client als de server is het type betrouwbaar sessiekanaal dat wordt ondersteund, afhankelijk van het type onderliggende kanaal dat wordt gebruikt. De volgende tabel bevat de typen sessiekanalen die op de client worden ondersteund als functie van het onderliggende kanaaltype.
Ondersteunde betrouwbare sessiekanaaltypen† | IRequestChannel |
IRequestSessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IOutputSessionChannel |
Ja | Ja | Ja | Ja |
IRequestSessionChannel |
Ja | Ja | No | No |
IDuplexSessionChannel |
No | No | Ja | Ja |
†De ondersteunde kanaaltypen zijn de waarden die beschikbaar zijn voor de algemene TChannel
parameterwaarde die wordt doorgegeven aan de BuildChannelFactory<TChannel>(BindingContext) methode.
De volgende tabel bevat de typen sessiekanalen die op de server worden ondersteund als functie van het onderliggende kanaaltype.
Ondersteunde betrouwbare sessiekanaaltypen‡ | IReplyChannel |
IReplySessionChannel |
IDuplexChannel |
IDuplexSessionChannel |
---|---|---|---|---|
IInputSessionChannel |
Ja | Ja | Ja | Ja |
IReplySessionChannel |
Ja | Ja | No | No |
IDuplexSessionChannel |
No | No | Ja | Ja |
‡De ondersteunde kanaaltypen zijn de waarden die beschikbaar zijn voor de algemene TChannel
parameterwaarde die wordt doorgegeven aan de BuildChannelListener<TChannel>(BindingContext) methode.
Betrouwbare sessies en beveiliging
Het beveiligen van een betrouwbare sessie is belangrijk om ervoor te zorgen dat de communicerende partijen (service en client) worden geverifieerd en dat er niet met de berichten in de sessie wordt geknoeid. Bovendien is het belangrijk om de integriteit van elke afzonderlijke betrouwbare sessie te waarborgen. Een betrouwbare sessie wordt beveiligd door deze te binden aan een beveiligingscontext die wordt weergegeven en beheerd door een beveiligingssessiekanaal. Het beveiligingskanaal biedt een beveiligingssessie. Beveiligingstokens die worden uitgewisseld tijdens de sessie-instelling, worden vervolgens gebruikt om de berichten in de betrouwbare sessie te beveiligen.
Wanneer een betrouwbare sessie via TCP-S verloopt, is de TCP-sessie gekoppeld aan de betrouwbare sessie. Transportbeveiliging zorgt er daarom voor dat beveiliging ook is gekoppeld aan de betrouwbare sessie. In dit geval is het opnieuw instellen van de verbinding uitgeschakeld.
De enige uitzondering is wanneer u HTTPS gebruikt. De SSL-sessie (Secure Sockets Layer) is niet gebonden aan de betrouwbare sessie. Dit legt een bedreiging op omdat sessies die een beveiligingscontext delen (de SSL-sessie) niet van elkaar worden beschermd; dit kan al dan niet een echte bedreiging zijn, afhankelijk van de toepassing.
Betrouwbare sessies gebruiken
Als u betrouwbare WCF-sessies wilt gebruiken, maakt u een eindpunt met een binding die ondersteuning biedt voor een betrouwbare sessie. Gebruik een van de door het systeem geleverde bindingen die WCF biedt met de betrouwbare sessie ingeschakeld of maak uw eigen aangepaste binding die dit doet.
De door het systeem gedefinieerde bindingen die standaard een betrouwbare sessie ondersteunen en inschakelen, zijn onder andere:
De door het systeem geleverde bindingen die ondersteuning bieden voor een betrouwbare sessie als optie, maar die niet standaard zijn ingeschakeld, zijn:
Zie Procedure voor een voorbeeld van het maken van een aangepaste binding : Een aangepaste betrouwbare sessiebinding maken met HTTPS.
Zie Door het systeem geleverde bindingen voor een bespreking van WCF-bindingen die betrouwbare sessies ondersteunen.
Wanneer gebruikt u betrouwbare sessies?
Het is belangrijk om te begrijpen wanneer u betrouwbare sessies in uw toepassing gebruikt. WCF ondersteunt betrouwbare sessies tussen eindpunten die actief en actief zijn op hetzelfde moment. Als uw toepassing vereist dat een van de eindpunten gedurende een bepaalde periode niet beschikbaar is, gebruikt u wachtrijen om betrouwbaarheid te bereiken.
Als voor het scenario twee eindpunten zijn vereist die zijn verbonden via TCP, is TCP mogelijk voldoende om betrouwbare berichtenuitwisselingen te bieden. Hoewel het niet nodig is om een betrouwbare sessie te gebruiken, omdat TCP ervoor zorgt dat de pakketten in orde en slechts één keer binnenkomen.
Als uw scenario een van de volgende kenmerken heeft, moet u serieus overwegen om een betrouwbare sessie te gebruiken.
SOAP-tussenpersonen, zoals SOAP-routers
Proxy-tussenpersonen of transportbruggen
Onregelmatige connectiviteit
Sessies via HTTP