Dela via


Grundläggande begrepp för Windows Communication Foundation

Det här dokumentet innehåller en översikt över WCF-arkitekturen (Windows Communication Foundation). Syftet är att förklara viktiga begrepp och hur de passar ihop. En självstudiekurs om hur du skapar den enklaste versionen av en WCF-tjänst och -klient finns i Komma igång självstudie. Mer information om WCF-programmering finns i Grundläggande WCF-programmering.

Grunderna i WCF

WCF är en körning och en uppsättning API:er för att skapa system som skickar meddelanden mellan tjänster och klienter. Samma infrastruktur och API:er används för att skapa program som kommunicerar med andra program på samma datorsystem eller i ett system som finns i ett annat företag och som nås via Internet.

Meddelanden och slutpunkter

WCF baseras på begreppet meddelandebaserad kommunikation, och allt som kan modelleras som ett meddelande (till exempel en HTTP-begäran eller ett meddelandekömeddelande (även kallat MSMQ) kan representeras på ett enhetligt sätt i programmeringsmodellen. Detta möjliggör ett enhetligt API för olika transportmekanismer.

Modellen skiljer mellan klienter, som är program som initierar kommunikation, och tjänster, som är program som väntar på att klienter ska kommunicera med dem och svara på den kommunikationen. Ett enda program kan fungera som både en klient och en tjänst. Exempel finns i Duplex-tjänster och Peer-to-Peer-nätverk.

Meddelanden skickas mellan slutpunkter. Slutpunkter är platser där meddelanden skickas eller tas emot (eller båda) och de definierar all information som krävs för meddelandeutbytet. En tjänst exponerar en eller flera programslutpunkter (samt noll eller flera infrastrukturslutpunkter) och klienten genererar en slutpunkt som är kompatibel med en av tjänstens slutpunkter.

En slutpunkt beskriver på ett standardbaserat sätt var meddelanden ska skickas, hur de ska skickas och hur meddelandena ska se ut. En tjänst kan exponera den här informationen som metadata som klienter kan bearbeta för att generera lämpliga WCF-klienter och kommunikationsstackar.

Kommunikationsprotokoll

Ett obligatoriskt element i kommunikationsstacken är transportprotokollet. Meddelanden kan skickas via intranät och Internet med vanliga transporter, till exempel HTTP och TCP. Andra transporter ingår som stöder kommunikation med Message Queuing-program och noder i ett peer-nätverksnät. Fler transportmekanismer kan läggas till med hjälp av de inbyggda tilläggspunkterna för WCF.

Ett annat obligatoriskt element i kommunikationsstacken är kodningen som anger hur ett visst meddelande formateras. WCF innehåller följande kodningar:

  • Textkodning, en samverkande kodning.

  • MTOM-kodning (Message Transmission Optimization Mechanism), som är ett interoperabelt sätt att effektivt skicka ostrukturerade binära data till och från en tjänst.

  • Binär kodning för effektiv överföring.

Fler kodningsmekanismer (till exempel en komprimeringskodning) kan läggas till med hjälp av de inbyggda tilläggspunkterna för WCF.

Meddelandemönster

WCF har stöd för flera meddelandemönster, inklusive begärandesvar, enkelriktad och duplexkommunikation. Olika transporter stöder olika meddelandemönster och påverkar därmed de typer av interaktioner som de stöder. WCF-API:erna och körningen hjälper dig också att skicka meddelanden på ett säkert och tillförlitligt sätt.

WCF-villkor

Andra begrepp och termer som används i WCF-dokumentationen är följande:

Meddelande
En fristående dataenhet som kan bestå av flera delar, inklusive en brödtext och rubriker.

Tjänst
En konstruktion som exponerar en eller flera slutpunkter, där varje slutpunkt exponerar en eller flera tjänståtgärder.

Slutpunkt
En konstruktion där meddelanden skickas eller tas emot (eller båda). Den består av en plats (en adress) som definierar var meddelanden kan skickas, en specifikation av kommunikationsmekanismen (en bindning) som beskriver hur meddelanden ska skickas och en definition för en uppsättning meddelanden som kan skickas eller tas emot (eller båda) på den platsen (ett tjänstkontrakt) som beskriver vilket meddelande som kan skickas.

En WCF-tjänst exponeras för världen som en samling slutpunkter.

Programslutpunkt
En slutpunkt som exponeras av programmet och som motsvarar ett tjänstkontrakt som implementeras av programmet.

Infrastrukturslutpunkt
En slutpunkt som exponeras av infrastrukturen för att underlätta funktioner som behövs eller tillhandahålls av tjänsten som inte är relaterad till ett tjänstkontrakt. En tjänst kan till exempel ha en infrastrukturslutpunkt som tillhandahåller metadatainformation.

Address
Anger den plats där meddelanden tas emot. Den anges som en URI (Uniform Resource Identifier). I URI-schemadelen namnges den transportmekanism som ska användas för att nå adressen, till exempel HTTP och TCP. Den hierarkiska delen av URI:n innehåller en unik plats vars format är beroende av transportmekanismen.

Med slutpunktsadressen kan du skapa unika slutpunktsadresser för varje slutpunkt i en tjänst eller, under vissa förhållanden, dela en adress mellan slutpunkter. I följande exempel visas en adress som använder HTTPS-protokollet med en port som inte är standard:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

Bindande
Definierar hur en slutpunkt kommunicerar med världen. Den är konstruerad av en uppsättning komponenter som kallas bindningselement som "staplar" en ovanpå den andra för att skapa kommunikationsinfrastrukturen. En bindning definierar åtminstone transporten (till exempel HTTP eller TCP) och den kodning som används (till exempel text eller binär). En bindning kan innehålla bindningselement som anger information som de säkerhetsmekanismer som används för att skydda meddelanden eller det meddelandemönster som används av en slutpunkt. Mer information finns i Konfigurera tjänster.

Bindningselement
Representerar en viss del av bindningen, till exempel en transport, en kodning, en implementering av ett protokoll på infrastrukturnivå (till exempel WS-ReliableMessaging) eller någon annan komponent i kommunikationsstacken.

Beteenden
En komponent som styr olika körningsaspekter av en tjänst, en slutpunkt, en viss åtgärd eller en klient. Beteenden grupperas efter omfång: vanliga beteenden påverkar alla slutpunkter globalt, tjänstbeteenden påverkar endast tjänstrelaterade aspekter, slutpunktsbeteenden påverkar endast slutpunktsrelaterade egenskaper och beteenden på åtgärdsnivå påverkar vissa åtgärder. Ett tjänstbeteende är till exempel begränsning, vilket anger hur en tjänst reagerar när ett överskott av meddelanden hotar att överbelasta dess hanteringsfunktioner. Ett slutpunktsbeteende styr å andra sidan endast aspekter som är relevanta för slutpunkter, till exempel hur och var du hittar en säkerhetsautentiseringsuppgift.

Bindningar som tillhandahålls av systemet
WCF innehåller ett antal bindningar som tillhandahålls av systemet. Det här är samlingar med bindningselement som är optimerade för specifika scenarier. Till exempel WSHttpBinding är utformad för samverkan med tjänster som implementerar olika WS-* specifikationer. Dessa fördefinierade bindningar sparar tid genom att endast presentera de alternativ som kan tillämpas korrekt på det specifika scenariot. Om en fördefinierad bindning inte uppfyller dina krav kan du skapa en egen anpassad bindning.

Konfiguration jämfört med kodning
Kontroll av ett program kan göras antingen genom kodning, konfiguration eller genom en kombination av båda. Konfigurationen har fördelen att någon annan än utvecklaren (till exempel en nätverksadministratör) kan ange klient- och tjänstparametrar när koden har skrivits och utan att behöva kompilera om. Med konfigurationen kan du inte bara ange värden som slutpunktsadresser, utan även ge ytterligare kontroll genom att göra det möjligt att lägga till slutpunkter, bindningar och beteenden. Med kodning kan utvecklaren behålla strikt kontroll över alla komponenter i tjänsten eller klienten, och alla inställningar som görs via konfigurationen kan kontrolleras och vid behov åsidosättas av koden.

Tjänståtgärd
En procedur som definieras i en tjänsts kod som implementerar funktionerna för en åtgärd. Den här åtgärden exponeras för klienter som metoder på en WCF-klient. Metoden kan returnera ett värde och kan ta ett valfritt antal argument eller inte ta några argument och returnera inget svar. En åtgärd som fungerar som en enkel "Hello" kan till exempel användas som ett meddelande om en klients närvaro och för att påbörja en serie åtgärder.

Servicekontrakt
Kopplar samman flera relaterade åtgärder till en enda funktionell enhet. Kontraktet kan definiera inställningar på tjänstnivå, till exempel tjänstens namnområde, ett motsvarande återanropskontrakt och andra sådana inställningar. I de flesta fall definieras kontraktet genom att skapa ett gränssnitt i valfritt programmeringsspråk och tillämpa ServiceContractAttribute attributet på gränssnittet. Det faktiska tjänstkodresultatet genom att implementera gränssnittet.

Åtgärdskontrakt
Ett åtgärdskontrakt definierar parametrarna och returtypen för en åtgärd. När du skapar ett gränssnitt som definierar tjänstkontraktet signerar du ett åtgärdskontrakt genom att tillämpa OperationContractAttribute attributet på varje metoddefinition som ingår i kontraktet. Åtgärderna kan modelleras som att ta ett enda meddelande och returnera ett enda meddelande, eller som att ta en uppsättning typer och returnera en typ. I det senare fallet avgör systemet formatet för de meddelanden som behöver bytas ut för den åtgärden.

Meddelandekontrakt
Beskriver formatet på ett meddelande. Den deklarerar till exempel om meddelandeelement ska gå i rubriker jämfört med brödtexten, vilken säkerhetsnivå som ska tillämpas på vilka element i meddelandet och så vidare.

Felkontrakt
Kan associeras med en tjänståtgärd för att ange fel som kan returneras till anroparen. En åtgärd kan ha noll eller fler fel associerade med den. Dessa fel är SOAP-fel som modelleras som undantag i programmeringsmodellen.

Datakontrakt
Beskrivningarna i metadata för de datatyper som en tjänst använder. Detta gör det möjligt för andra att samverka med tjänsten. Datatyperna kan användas i valfri del av ett meddelande, till exempel som parametrar eller returtyper. Om tjänsten bara använder enkla typer behöver du inte uttryckligen använda datakontrakt.

Värd
En tjänst måste finnas i någon process. En värd är ett program som styr tjänstens livslängd. Tjänster kan vara lokalt värdbaserade eller hanteras av en befintlig värdprocess.

Lokalt installerad tjänst
En tjänst som körs i ett processprogram som utvecklaren skapade. Utvecklaren styr dess livslängd, anger tjänstens egenskaper, öppnar tjänsten (som ställer in den i ett lyssningsläge) och stänger tjänsten.

Värdprocess
Ett program som är utformat för att vara värd för tjänster. Dessa inkluderar Internet Information Services (IIS), Windows Activation Services (WAS) och Windows Services. I dessa värdbaserade scenarier styr värden tjänstens livslängd. Om du till exempel använder IIS kan du konfigurera en virtuell katalog som innehåller tjänstsammansättningen och konfigurationsfilen. När ett meddelande tas emot startar IIS tjänsten och styr dess livslängd.

Instancing
En tjänst har en instancing-modell. Det finns tre instancing-modeller: "single", där ett enda CLR-objekt betjänar alla klienter; " per anrop", där ett nytt CLR-objekt skapas för att hantera varje klientanrop. och "per session", där en uppsättning CLR-objekt skapas, en för varje separat session. Valet av en instancing-modell beror på programkraven och tjänstens förväntade användningsmönster.

Klientprogram
Ett program som utbyter meddelanden med en eller flera slutpunkter. Klientprogrammet börjar med att skapa en instans av en WCF-klient och anropa metoder för WCF-klienten. Observera att ett enda program kan vara både en klient och en tjänst.

Kanal
Ett konkret genomförande av ett bindande element. Bindningen representerar konfigurationen och kanalen är den implementering som är associerad med den konfigurationen. Därför finns det en kanal som är associerad med varje bindningselement. Kanaler staplas ovanpå varandra för att skapa den konkreta implementeringen av bindningen: kanalstacken.

WCF-klient
En klientprogramkonstruktion som exponerar tjänståtgärderna som metoder (i det programmeringsspråk för .NET Framework som du väljer, till exempel Visual Basic eller Visual C#). Alla program kan vara värdar för en WCF-klient, inklusive ett program som är värd för en tjänst. Därför är det möjligt att skapa en tjänst som innehåller WCF-klienter för andra tjänster.

En WCF-klient kan genereras automatiskt med hjälp av Verktyget för ServiceModel-metadata (Svcutil.exe) och rikta den mot en tjänst som kör som publicerar metadata.

Metadata
I en tjänst beskrivs egenskaperna för tjänsten som en extern entitet behöver förstå för att kommunicera med tjänsten. Metadata kan användas av ServiceModel Metadata Utility Tool (Svcutil.exe) för att generera en WCF-klient och tillhörande konfiguration som ett klientprogram kan använda för att interagera med tjänsten.

Metadata som exponeras av tjänsten innehåller XML-schemadokument, som definierar tjänstens datakontrakt och WSDL-dokument, som beskriver metoderna för tjänsten.

När det är aktiverat genereras metadata för tjänsten automatiskt av WCF genom att inspektera tjänsten och dess slutpunkter. Om du vill publicera metadata från en tjänst måste du uttryckligen aktivera metadatabeteendet.

Säkerhet
I WCF ingår konfidentialitet (kryptering av meddelanden för att förhindra avlyssning), integritet (metoder för identifiering av manipulering av meddelandet), autentisering (metoder för validering av servrar och klienter) och auktorisering (kontroll av åtkomst till resurser). Dessa funktioner tillhandahålls antingen genom att utnyttja befintliga säkerhetsmekanismer, till exempel TLS via HTTP (kallas även HTTPS) eller genom att implementera en eller flera av de olika WS-* säkerhetsspecifikationerna.

Transportsäkerhetsläge
Anger att konfidentialitet, integritet och autentisering tillhandahålls av mekanismerna för transportskikt (till exempel HTTPS). När du använder en transport som HTTPS har det här läget fördelen att det är effektivt i sina prestanda och är väl förstått på grund av dess prevalens på Internet. Nackdelen är att den här typen av säkerhet tillämpas separat på varje hopp i kommunikationsvägen, vilket gör kommunikationen mottaglig för en "man i mitten"-attack.

Meddelandesäkerhetsläge
Anger att säkerhet tillhandahålls genom att implementera en eller flera av säkerhetsspecifikationerna, till exempel specifikationen med namnet Web Services Security: SOAP Message Security. Varje meddelande innehåller de mekanismer som krävs för att tillhandahålla säkerhet under överföringen och för att mottagarna ska kunna identifiera manipulering och dekryptera meddelandena. På så sätt kapslas säkerheten in i varje meddelande, vilket ger säkerhet från slutpunkt till slutpunkt för flera hopp. Eftersom säkerhetsinformation blir en del av meddelandet är det också möjligt att inkludera flera typer av autentiseringsuppgifter med meddelandet (dessa kallas anspråk). Detta tillvägagångssätt har också fördelen att meddelandet kan färdas säkert över alla transporter, inklusive flera transporter mellan dess ursprung och destination. Nackdelen med den här metoden är komplexiteten hos de kryptografiska mekanismer som används, vilket resulterar i prestandakonsekvenser.

Transport med säkerhetsläge för meddelandeautentiseringsuppgifter
Anger användningen av transportlagret för att tillhandahålla konfidentialitet, autentisering och integritet för meddelandena, medan vart och ett av meddelandena kan innehålla flera autentiseringsuppgifter (anspråk) som krävs av mottagarna av meddelandet.

WS-*
Förkortning för den växande uppsättningen WS-specifikationer (Web Service), till exempel WS-Security, WS-ReliableMessaging och så vidare, som implementeras i WCF.

Se även