Dela via


Översikt över tillförlitliga sessioner

Windows Communication Foundation (WCF) SOAP reliable messaging ger tillförlitlighet för meddelandeöverföring från slutpunkt till slutpunkt mellan SOAP-slutpunkter. Det gör detta på nätverk som är opålitliga genom att övervinna transportfel och SOAP-fel på meddelandenivå. I synnerhet tillhandahåller den sessionsbaserad, enkel och (valfritt) ordnad leverans för meddelanden som skickas mellan SOAP- eller transportförmedlare. Sessionsbaserad leverans tillhandahåller gruppering av meddelanden i en session med valfri ordning på meddelandena.

Det här avsnittet beskriver tillförlitliga sessioner, hur och när du ska använda dem och hur du skyddar dem.

Tillförlitliga WCF-sessioner

WCF-tillförlitliga sessioner är en implementering av TILLFÖRLITLIGA SOAP-meddelanden enligt definitionen i WS-ReliableMessaging-protokollet.

Med tillförlitliga WCF SOAP-meddelanden får du en tillförlitlig session från slutpunkt till slutpunkt mellan två slutpunkter, oavsett antalet eller typen av mellanhänder som separerar meddelandeslutpunkterna. Detta omfattar alla transportförmedlare som inte använder SOAP (till exempel HTTP-proxyservrar) eller mellanhänder som använder SOAP (till exempel SOAP-baserade routrar eller bryggor) som krävs för att meddelanden ska flöda mellan slutpunkterna. En tillförlitlig sessionskanal stöder interaktiv kommunikation så att de tjänster som är anslutna via en sådan kanal körs samtidigt och utbyter och bearbetar meddelanden under förhållanden med låg svarstid, dvs. inom relativt korta tidsperioder. Den här kopplingen innebär att dessa komponenter gör framsteg tillsammans eller misslyckas tillsammans, så det finns ingen isolering mellan dem.

En tillförlitlig session maskerar två typer av fel:

  • SOAP-fel på meddelandenivå, som inkluderar förlorade eller duplicerade meddelanden och meddelanden som kommer i en annan ordning än den ordning i vilken de skickades.

  • Transportfel.

En tillförlitlig session implementerar WS-ReliableMessaging-protokollet och ett minnesinternt överföringsfönster för att maskera soap-fel på meddelandenivå och återupprätta anslutningar vid transportfel.

En tillförlitlig session ger SOAP-meddelanden vad TCP tillhandahåller för IP-paket. En TCP-socketanslutning ger en unik överföring i ordning av IP-paket mellan noder. Den tillförlitliga kanalen ger samma typ av tillförlitlig överföring, men den skiljer sig från TCP-socketens tillförlitlighet på följande sätt:

  • Tillförlitligheten är på SOAP-meddelandenivå, inte för ett godtyckligt storleksanpassat paket med byte.

  • Tillförlitligheten är transportneutral, inte bara för överföring via TCP.

  • Tillförlitligheten är inte kopplad till en viss transportsession (till exempel den session som en TCP-anslutning tillhandahåller) och kan använda flera transportsessioner samtidigt eller sekventiellt under den tillförlitliga sessionens livslängd.

  • Den tillförlitliga sessionen är mellan avsändarens och mottagarens SOAP-slutpunkter, oavsett hur många transportanslutningar som krävs för anslutningen mellan dem. Kort och gott slutar TCP-tillförlitligheten där transportanslutningen slutar, medan en tillförlitlig session ger tillförlitlighet från slutpunkt till slutpunkt.

Tillförlitliga sessioner och bindningar

Som tidigare nämnts är en tillförlitlig session transportneutral. Du kan också upprätta en tillförlitlig session över många mönster för meddelandeutbyte, till exempel begärandesvar eller duplex. En tillförlitlig WCF-session exponeras som en egenskap för en uppsättning bindningar.

Använd en tillförlitlig session på slutpunkter som använder:

  • HTTP-baserade transportstandardbindningar:

    • WsHttpBinding och exponera begärandesvar eller enkelriktade kontrakt.

    • När du använder en tillförlitlig session via ett begärandesvar eller ett enkelt envägstjänstkontrakt.

    • WsDualHttpBinding och exponera duplex-, request-reply- eller enkelriktade kontrakt.

    • WsFederationHttpBinding och exponera begärandesvar eller enkelriktade kontrakt.

  • TCP-baserade transportstandardbindningar:

    • NetTcpBinding och exponera duplex, begära svar eller enkelriktade kontrakt.

Använd en tillförlitlig session på andra bindningar genom att skapa en anpassad bindning, till exempel HTTPS (för mer information om problem, se Tillförlitliga sessioner och säkerhet) eller en namngiven rörbindning.

Du kan stapla en tillförlitlig session på olika underliggande kanaltyper och den resulterande tillförlitliga sessionskanalformen varierar. På både klienten och servern beror typen av tillförlitlig sessionskanal som stöds på vilken typ av underliggande kanal som används. I följande tabell visas de typer av sessionskanaler som stöds på klienten som en funktion av den underliggande kanaltypen.

Tillförlitliga typer av sessionskanaler som stöds† IRequestChannel IRequestSessionChannel IDuplexChannel IDuplexSessionChannel
IOutputSessionChannel Ja Ja Ja Ja
IRequestSessionChannel Ja Ja No No
IDuplexSessionChannel No No Ja Ja

†De kanaltyper som stöds är de värden som är tillgängliga för det generiska TChannel parametervärdet som skickas till BuildChannelFactory<TChannel>(BindingContext) metoden.

I följande tabell visas de typer av sessionskanaler som stöds på servern som en funktion av den underliggande kanaltypen.

Tillförlitliga typer av sessionskanaler som stöds‡ IReplyChannel IReplySessionChannel IDuplexChannel IDuplexSessionChannel
IInputSessionChannel Ja Ja Ja Ja
IReplySessionChannel Ja Ja No No
IDuplexSessionChannel No No Ja Ja

‡De kanaltyper som stöds är de värden som är tillgängliga för det allmänna TChannel parametervärdet som skickas till BuildChannelListener<TChannel>(BindingContext) metoden.

Tillförlitliga sessioner och säkerhet

Det är viktigt att skydda en tillförlitlig session för att säkerställa att de kommunicerande parterna (tjänsten och klienten) autentiseras och att de meddelanden som utbyts under sessionen inte manipuleras. Dessutom är det viktigt att säkerställa integriteten för varje enskild tillförlitlig session. En tillförlitlig session skyddas genom att den binds till en säkerhetskontext som representeras och hanteras av en säkerhetssessionskanal. Säkerhetskanalen tillhandahåller en säkerhetssession. Säkerhetstoken som utbyts under sessionsetableringen används sedan för att skydda meddelandena i den tillförlitliga sessionen.

När en tillförlitlig session är över TCP-S är TCP-sessionen knuten till den tillförlitliga sessionen. Därför säkerställer transportsäkerheten att säkerheten också är kopplad till den tillförlitliga sessionen. I det här fallet är återetableringen av anslutningen avstängd.

Det enda undantaget är när du använder HTTPS. SSL-sessionen (Secure Sockets Layer) är inte bunden till den tillförlitliga sessionen. Detta medför ett hot eftersom sessioner som delar en säkerhetskontext (SSL-sessionen) inte skyddas från varandra. detta kan vara ett verkligt hot beroende på programmet.

Använda tillförlitliga sessioner

Om du vill använda tillförlitliga WCF-sessioner skapar du en slutpunkt med en bindning som stöder en tillförlitlig session. Använd en av de systembaserade bindningar som WCF tillhandahåller med den tillförlitliga sessionen aktiverad eller skapa en egen anpassad bindning som gör detta.

De systemdefinierade bindningar som stöder och aktiverar en tillförlitlig session som standard är:

De bindningar som tillhandahålls av systemet som stöder en tillförlitlig session som ett alternativ men som inte aktiverar en som standard inkluderar:

Ett exempel på hur du skapar en anpassad bindning finns i Så här skapar du en anpassad tillförlitlig sessionsbindning med HTTPS.

En diskussion om WCF-bindningar som stöder tillförlitliga sessioner finns i Bindningar som tillhandahålls av systemet.

När du ska använda tillförlitliga sessioner

Det är viktigt att förstå när du ska använda tillförlitliga sessioner i ditt program. WCF stöder tillförlitliga sessioner mellan slutpunkter som är aktiva och aktiva samtidigt. Om programmet kräver att en av slutpunkterna inte är tillgänglig under en längre tid använder du köer för att uppnå tillförlitlighet.

Om scenariot kräver två slutpunkter som är anslutna via TCP kan TCP vara tillräckligt för att tillhandahålla tillförlitliga meddelandeutbyten. Även om det inte är nödvändigt att använda en tillförlitlig session, eftersom TCP ser till att paketen kommer i ordning och bara en gång.

Om ditt scenario har något av följande egenskaper måste du överväga att använda en tillförlitlig session på allvar.

  • SOAP-mellanhänder, till exempel SOAP-routrar

  • Proxyförmedlare eller transportbroar

  • Tillfälliga anslutningsmöjligheter

  • Sessioner via HTTP

Se även