Dela via


Översikt över kanalmodell

WCF-kanalstacken (Windows Communication Foundation) är en kommunikationsstack i flera lager med en eller flera kanaler som bearbetar meddelanden. Längst ned i stacken finns en transportkanal som ansvarar för att anpassa kanalstacken till den underliggande transporten (till exempel TCP, HTTP, SMTP och andra typer av transporter.). Kanaler tillhandahåller en programmeringsmodell på låg nivå för att skicka och ta emot meddelanden. Den här programmeringsmodellen förlitar sig på flera gränssnitt och andra typer som tillsammans kallas WCF-kanalmodellen. I det här avsnittet beskrivs kanalformer, byggandet av en grundläggande kanallyssnare (i tjänsten) och kanalfabriken (på klienten).

Kanalstacken

WCF-slutpunkter kommunicerar med världen med hjälp av en kommunikationsstack som kallas kanalstacken. I följande diagram jämförs kanalstacken med andra kommunikationsstackar, till exempel TCP/IP.

Channel Model

För det första likheterna: I båda fallen ger varje lager i stacken en abstraktion av världen under det lagret och exponerar den abstraktionen endast för lagret direkt ovanför det. Varje lager använder abstraktionen av endast lagret direkt under det. I båda fallen, när två staplar kommunicerar, kommunicerar varje lager med motsvarande lager i den andra stacken, till exempel kommunicerar IP-lagret med IP-lagret och TCP-lagret med TCP-lagret och så vidare.

Nu är skillnaderna: TCP-stacken har utformats för att ge en abstraktion av det fysiska nätverket, men kanalstacken är utformad för att ge en abstraktion av inte bara hur meddelandet levereras, dvs. transporten, utan även andra funktioner som vad som finns i meddelandet eller vilket protokoll som används för kommunikation, transporten men mycket mer än så. Till exempel är tillförlitligt sessionsbindningselement en del av kanalstacken men ligger inte under själva transporten eller själva transporten. Den här abstraktionen uppnås genom att kräva att den nedre kanalen i stacken anpassar det underliggande transportprotokollet till kanalstackens arkitektur och sedan förlitar sig på kanaler längre upp i stacken för att tillhandahålla kommunikationsfunktioner som tillförlitlighetsgarantier och säkerhet.

Meddelanden flödar genom kommunikationsstacken som Message objekt. Som du ser i bilden ovan kallas den nedre kanalen för en transportkanal. Det är kanalen som ansvarar för att skicka och ta emot meddelanden till och från andra parter. Detta omfattar ansvaret för att transformera Message objektet till och från det format som används för att kommunicera med andra parter. Ovanför transportkanalen kan det finnas valfritt antal protokollkanaler som var och en ansvarar för att tillhandahålla en kommunikationsfunktion, till exempel tillförlitliga leveransgarantier. Protokollkanaler fungerar på meddelanden som flödar genom dem i form av Message objektet. De transformerar vanligtvis antingen meddelandet, till exempel genom att lägga till rubriker eller kryptera brödtexten, eller skicka och ta emot sina egna protokollkontrollmeddelanden, till exempel kvittotsbekräftelser.

Kanalformer

Varje kanal implementerar ett eller flera gränssnitt som kallas kanalformsgränssnitt eller kanalformer. Dessa kanalformer tillhandahåller kommunikationsorienterade metoder som att skicka och ta emot eller begära och svara som kanalen implementerar och användaren av kanalanropen. Vid basen av kanalformerna IChannel finns gränssnittet, som är ett gränssnitt som tillhandahåller en GetProperty<T-metod> som är avsedd som en skiktad mekanism för att få åtkomst till godtyckliga funktioner som exponeras av kanaler i stacken. De fem kanalformer som utökas IChannel är:

Dessutom har var och en av dessa former en motsvarighet som sträcker sig System.ServiceModel.Channels.ISessionChannel<TSession> till att stödja sessioner. Dessa är:

Kanalformerna är mönstrade efter några av de grundläggande mönster för meddelandeutbyte som stöds av befintliga transportprotokoll. Till exempel motsvarar enkelriktade meddelanden ett IInputChannel/IOutputChannel par, begärandesvar motsvarar IRequestChannelIReplyChannel/par och dubbelriktad duplexkommunikation motsvarar IDuplexChannel (som utökar både IInputChannel och ).IOutputChannel

Programmering med kanalstacken

Kanalstackar skapas vanligtvis med hjälp av ett fabriksmönster där en bindning skapar kanalstacken. På sändningssidan används en bindning för att skapa en ChannelFactory, som i sin tur skapar en kanalstack och returnerar en referens till den översta kanalen i stacken. Programmet kan sedan använda den här kanalen för att skicka meddelanden. Mer information finns i Programmering på klientkanalnivå.

På mottagarsidan används en bindning för att skapa en IChannelListener, som lyssnar efter inkommande meddelanden. IChannelListener Innehåller meddelanden till lyssnarprogrammet genom att skapa kanalstackar och ge programreferensen till den översta kanalen. Programmet använder sedan den här kanalen för att ta emot inkommande meddelanden. Mer information finns i Programmering på servicekanalnivå.

Kanalobjektmodellen

Kanalobjektmodellen är den grundläggande uppsättningen gränssnitt som krävs för att implementera kanaler, kanallyssnare och kanalfabriker. Det finns också vissa basklasser för att hjälpa till med anpassade implementeringar.

Kanallyssnare ansvarar för att lyssna efter inkommande meddelanden och sedan leverera dem till lagret ovan via kanaler som skapats av kanallyssnaren.

Kanalfabriker ansvarar för att skapa kanaler som används för att skicka meddelanden och för att stänga alla kanaler som de skapade när kanalfabriken stängs.

ICommunicationObject är kärngränssnittet som definierar den grundläggande tillståndsdator som alla kommunikationsobjekt implementerar. CommunicationObject tillhandahåller en implementering av det här kärngränssnittet som andra kanalklasser kan härleda från i stället för att implementera gränssnittet igen. Detta krävs dock inte: en anpassad kanal kan implementera ICommunicationObject direkt och inte ärva från CommunicationObject. Ingen av klasserna i bild 3 anses vara en del av kanalmodellen. de är hjälpverktyg som är tillgängliga för anpassade kanalverktyg som vill skapa kanaler.

Channel model

I följande avsnitt beskrivs kanalobjektmodellen samt olika utvecklingsområden som hjälper dig att skapa anpassade kanaler.

Område beskrivning
Tjänst: Kanallyssnare och kanaler Beskriver kanallyssnare som lyssnar efter inkommande kanaler i ett tjänstprogram.
Klient: Kanalfabriker och kanaler Beskriver kanalfabriker som skapar kanaler för att ansluta till ett tjänstprogram.
Förstå tillståndsändringar Beskriver hur gränssnittsmodellernas System.ServiceModel.ICommunicationObject tillstånd ändras i kanaler.
Välja ett Exchange-meddelandemönster Beskriver de sex grundläggande mönster för meddelandeutbyte som kanaler kan stödja.
Hantera undantag och fel Beskriver hur du hanterar fel och undantag i anpassade kanaler.
Stöd för konfiguration och metadata Beskriver hur du stöder användning av anpassade kanaler från programmodellen och hur du exporterar och importerar metadata med bindningar och bindningselement.