Delen via


Basisconcepten van Windows Communication Foundation

Dit document biedt een algemeen overzicht van de WCF-architectuur (Windows Communication Foundation). Het is bedoeld om belangrijke concepten uit te leggen en hoe ze bij elkaar passen. Zie De zelfstudie Aan de slag voor een zelfstudie over het maken van de eenvoudigste versie van een WCF-service en -client. Zie Basic WCF Programming voor meer informatie over WCF-programmering.

Grondbeginselen van WCF

WCF is een runtime en een set API's voor het maken van systemen die berichten verzenden tussen services en clients. Dezelfde infrastructuur en API's worden gebruikt om toepassingen te maken die communiceren met andere toepassingen op hetzelfde computersysteem of op een systeem dat zich in een ander bedrijf bevindt en toegankelijk is via internet.

Berichten en eindpunten

WCF is gebaseerd op het begrip berichtcommunicatie en alles wat kan worden gemodelleerd als een bericht (bijvoorbeeld een HTTP-aanvraag of een Message Queuing-bericht (ook wel MSMQ genoemd) kan op een uniforme manier in het programmeermodel worden weergegeven. Dit maakt een geïntegreerde API mogelijk voor verschillende transportmechanismen.

Het model maakt onderscheid tussen clients, toepassingen die communicatie initiëren en services. Dit zijn toepassingen die wachten tot clients met hen communiceren en reageren op die communicatie. Eén toepassing kan fungeren als zowel een client als een service. Zie Duplex Services en Peer-to-Peer-netwerken voor voorbeelden.

Berichten worden verzonden tussen eindpunten. Eindpunten zijn plaatsen waar berichten worden verzonden of ontvangen (of beide) en ze definiëren alle informatie die vereist is voor de uitwisseling van berichten. Een service maakt een of meer toepassingseindpunten beschikbaar (evenals nul of meer infrastructuureindpunten) en de client genereert een eindpunt dat compatibel is met een van de eindpunten van de service.

Een eindpunt beschrijft op een standaardgebaseerde manier waar berichten moeten worden verzonden, hoe ze moeten worden verzonden en hoe de berichten eruit moeten zien. Een service kan deze informatie beschikbaar maken als metagegevens die clients kunnen verwerken om de juiste WCF-clients en communicatiestacks te genereren.

Communicatieprotocollen

Een vereist element van de communicatiestack is het transportprotocol. Berichten kunnen via intranetten en internet worden verzonden met behulp van algemene transporten, zoals HTTP en TCP. Andere transporten zijn opgenomen die ondersteuning bieden voor communicatie met Message Queuing-toepassingen en -knooppunten op een Peer Networking Mesh. Er kunnen meer transportmechanismen worden toegevoegd met behulp van de ingebouwde uitbreidingspunten van WCF.

Een ander vereist element in de communicatiestack is de codering die aangeeft hoe een bepaald bericht wordt opgemaakt. WCF biedt de volgende coderingen:

  • Tekstcodering, een interoperabele codering.

  • MTOM-codering (Message Transmission Optimization Mechanism), een interoperabele manier voor het efficiënt verzenden van ongestructureerde binaire gegevens naar en van een service.

  • Binaire codering voor efficiënte overdracht.

Er kunnen meer coderingsmechanismen (bijvoorbeeld een compressiecodering) worden toegevoegd met behulp van de ingebouwde uitbreidingspunten van WCF.

Berichtpatronen

WCF ondersteunt verschillende berichtpatronen, waaronder aanvraag-antwoord, eenrichtingscommunicatie en dubbelzijdige communicatie. Verschillende transporten ondersteunen verschillende berichtpatronen en zijn dus van invloed op de soorten interacties die ze ondersteunen. De WCF-API's en runtime helpen u ook veilig en betrouwbaar berichten te verzenden.

WCF-voorwaarden

Andere concepten en termen die in de WCF-documentatie worden gebruikt, zijn onder andere:

Bericht
Een zelfstandige eenheid met gegevens die uit verschillende onderdelen kan bestaan, waaronder een hoofdtekst en kopteksten.

Onderhoud
Een constructie die een of meer eindpunten beschikbaar maakt, waarbij elk eindpunt een of meer servicebewerkingen weergeeft.

Eindpunt
Een constructie waarmee berichten worden verzonden of ontvangen (of beide). Het omvat een locatie (een adres) die definieert waar berichten kunnen worden verzonden, een specificatie van het communicatiemechanisme (een binding) die beschrijft hoe berichten moeten worden verzonden en een definitie voor een set berichten die kunnen worden verzonden of ontvangen (of beide) op die locatie (een servicecontract) die beschrijft welk bericht kan worden verzonden.

Een WCF-service wordt ter wereld weergegeven als een verzameling eindpunten.

Toepassingseindpunt
Een eindpunt dat wordt weergegeven door de toepassing en die overeenkomt met een servicecontract dat door de toepassing is geïmplementeerd.

Infrastructuureindpunt
Een eindpunt dat wordt weergegeven door de infrastructuur om functionaliteit te vergemakkelijken die nodig is of wordt geleverd door de service die niet betrekking heeft op een servicecontract. Een service kan bijvoorbeeld een infrastructuureindpunt hebben dat metagegevensgegevens levert.

Adres
Hiermee geeft u de locatie op waar berichten worden ontvangen. Deze wordt opgegeven als een URI (Uniform Resource Identifier). Het URI-schemaonderdeel noemt het transportmechanisme dat moet worden gebruikt om het adres te bereiken, zoals HTTP en TCP. Het hiërarchische deel van de URI bevat een unieke locatie waarvan de indeling afhankelijk is van het transportmechanisme.

Met het eindpuntadres kunt u unieke eindpuntadressen maken voor elk eindpunt in een service of onder bepaalde voorwaarden een adres delen tussen eindpunten. In het volgende voorbeeld ziet u een adres met behulp van het HTTPS-protocol met een niet-standaardpoort:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

Bindend
Definieert hoe een eindpunt communiceert met de wereld. Het is samengesteld uit een set onderdelen die bindingselementen worden genoemd die een 'stapelen' boven op de andere om de communicatie-infrastructuur te maken. In ieder geval definieert een binding het transport (zoals HTTP of TCP) en de codering die wordt gebruikt (zoals tekst of binair). Een binding kan bindingselementen bevatten die details opgeven, zoals de beveiligingsmechanismen die worden gebruikt voor het beveiligen van berichten of het berichtpatroon dat door een eindpunt wordt gebruikt. Zie Services configureren voor meer informatie.

Bindingselement
Vertegenwoordigt een bepaald deel van de binding, zoals een transport, een codering, een implementatie van een protocol op infrastructuurniveau (zoals WS-ReliableMessaging) of een ander onderdeel van de communicatiestack.

Gedrag
Een onderdeel waarmee verschillende runtimeaspecten van een service, een eindpunt, een bepaalde bewerking of een client worden beheerd. Gedrag wordt gegroepeerd op basis van het bereik: veelvoorkomend gedrag is van invloed op alle eindpunten wereldwijd, servicegedrag is alleen van invloed op servicegerelateerde aspecten, eindpuntgedrag is alleen van invloed op eindpunteigenschappen en gedrag op bewerkingsniveau zijn van invloed op bepaalde bewerkingen. Eén servicegedrag is bijvoorbeeld beperking, waarmee wordt aangegeven hoe een service reageert wanneer een overschot aan berichten de afhandelingsmogelijkheden dreigt te overbelasten. Een eindpuntgedrag bepaalt daarentegen alleen aspecten die relevant zijn voor eindpunten, zoals hoe en waar u een beveiligingsreferentie kunt vinden.

Door het systeem geleverde bindingen
WCF bevat een aantal door het systeem geleverde bindingen. Dit zijn verzamelingen bindingselementen die zijn geoptimaliseerd voor specifieke scenario's. Het is bijvoorbeeld WSHttpBinding ontworpen voor interoperabiliteit met services die verschillende WS-* specificaties implementeren. Deze vooraf gedefinieerde bindingen besparen tijd door alleen de opties weer te geven die correct kunnen worden toegepast op het specifieke scenario. Als een vooraf gedefinieerde binding niet aan uw vereisten voldoet, kunt u uw eigen aangepaste binding maken.

Configuratie versus codering
Het beheer van een toepassing kan worden uitgevoerd via codering, configuratie of via een combinatie van beide. Configuratie heeft het voordeel dat iemand anders dan de ontwikkelaar (bijvoorbeeld een netwerkbeheerder) client- en serviceparameters kan instellen nadat de code is geschreven en zonder dat deze opnieuw hoeft te worden gecompileert. Met configuratie kunt u niet alleen waarden instellen, zoals eindpuntadressen, maar ook verdere controle door eindpunten, bindingen en gedrag toe te voegen. Met coderen kan de ontwikkelaar strikte controle houden over alle onderdelen van de service of client, en alle instellingen die via de configuratie worden uitgevoerd, kunnen worden gecontroleerd en indien nodig worden overschreven door de code.

Servicebewerking
Een procedure die is gedefinieerd in de code van een service waarmee de functionaliteit voor een bewerking wordt geïmplementeerd. Deze bewerking wordt beschikbaar gesteld aan clients als methoden op een WCF-client. Met de methode kan een waarde worden geretourneerd en kan een optioneel aantal argumenten worden gebruikt of geen argumenten worden gebruikt en geen antwoord worden geretourneerd. Een bewerking die fungeert als een eenvoudige 'Hallo' kan bijvoorbeeld worden gebruikt als een melding van de aanwezigheid van een client en om een reeks bewerkingen te starten.

Servicecontract
Koppelt meerdere gerelateerde bewerkingen aan één functionele eenheid. Het contract kan instellingen op serviceniveau definiëren, zoals de naamruimte van de service, een bijbehorend callback-contract en andere dergelijke instellingen. In de meeste gevallen wordt het contract gedefinieerd door een interface te maken in de programmeertaal van uw keuze en het ServiceContractAttribute kenmerk toe te passen op de interface. De werkelijke servicecoderesultaten door de interface te implementeren.

Bewerkingscontract
Een bewerkingscontract definieert de parameters en het retourtype van een bewerking. Wanneer u een interface maakt waarmee het servicecontract wordt gedefinieerd, ondertekent u een bewerkingscontract door het OperationContractAttribute kenmerk toe te passen op elke methodedefinitie die deel uitmaakt van het contract. De bewerkingen kunnen worden gemodelleerd als het nemen van één bericht en het retourneren van één bericht, of als het nemen van een set typen en het retourneren van een type. In het laatste geval bepaalt het systeem de indeling voor de berichten die moeten worden uitgewisseld voor die bewerking.

Berichtcontract
Beschrijft de indeling van een bericht. Er wordt bijvoorbeeld aangegeven of berichtelementen moeten worden geplaatst in kopteksten versus de hoofdtekst, welk beveiligingsniveau moet worden toegepast op welke elementen van het bericht, enzovoort.

Foutcontract
Kan worden gekoppeld aan een servicebewerking om fouten aan te geven die kunnen worden geretourneerd naar de beller. Aan een bewerking kunnen nul of meer fouten zijn gekoppeld. Deze fouten zijn SOAP-fouten die zijn gemodelleerd als uitzonderingen in het programmeermodel.

Gegevenscontract
De beschrijvingen in metagegevens van de gegevenstypen die een service gebruikt. Hierdoor kunnen anderen samenwerken met de service. De gegevenstypen kunnen in elk deel van een bericht worden gebruikt, bijvoorbeeld als parameters of retourtypen. Als de service alleen eenvoudige typen gebruikt, hoeft u geen gegevenscontracten expliciet te gebruiken.

Hosting
Een service moet in een bepaald proces worden gehost. Een host is een toepassing die de levensduur van de service bepaalt. Services kunnen zelf worden gehost of beheerd door een bestaand hostingproces.

Zelf-hostende service
Een service die wordt uitgevoerd in een procestoepassing die de ontwikkelaar heeft gemaakt. De ontwikkelaar bepaalt de levensduur, stelt de eigenschappen van de service in, opent de service (waarmee deze in een luistermodus wordt ingesteld) en sluit de service.

Hostingproces
Een toepassing die is ontworpen voor het hosten van services. Deze omvatten Internet Information Services (IIS), Windows Activation Services (WAS) en Windows Services. In deze gehoste scenario's bepaalt de host de levensduur van de service. Met IIS kunt u bijvoorbeeld een virtuele map instellen die de serviceassembly en het configuratiebestand bevat. Wanneer een bericht wordt ontvangen, start IIS de service en bepaalt de levensduur ervan.

Instancing
Een service heeft een model voor instancing. Er zijn drie instancing-modellen: 'enkel', waarbij één CLR-object alle clients services; " per aanroep", waarin een nieuw CLR-object wordt gemaakt om elke clientoproep te verwerken; en 'per sessie', waarin een set CLR-objecten wordt gemaakt, één voor elke afzonderlijke sessie. De keuze van een model voor instancing is afhankelijk van de toepassingsvereisten en het verwachte gebruikspatroon van de service.

Clienttoepassing
Een programma waarmee berichten worden uitgewisseld met een of meer eindpunten. De clienttoepassing begint met het maken van een exemplaar van een WCF-client en het aanroepen van methoden van de WCF-client. Het is belangrijk om te weten dat één toepassing zowel een client als een service kan zijn.

Kanaal
Een concrete implementatie van een bindingselement. De binding vertegenwoordigt de configuratie en het kanaal is de implementatie die aan die configuratie is gekoppeld. Daarom is er een kanaal gekoppeld aan elk bindingselement. Kanalen stapelen op elkaar om de concrete implementatie van de binding te maken: de kanaalstack.

WCF-client
Een clienttoepassingsconstructie die de servicebewerkingen beschikbaar maakt als methoden (in de programmeertaal .NET Framework van uw keuze, zoals Visual Basic of Visual C#). Elke toepassing kan een WCF-client hosten, inclusief een toepassing die als host fungeert voor een service. Daarom is het mogelijk om een service te maken die WCF-clients van andere services omvat.

Een WCF-client kan automatisch worden gegenereerd met behulp van het Hulpprogramma voor metagegevens van ServiceModel (Svcutil.exe) en deze aanwijst bij een actieve service die metagegevens publiceert.

Metagegevens
In een service worden de kenmerken van de service beschreven die een externe entiteit moet begrijpen om met de service te communiceren. Metagegevens kunnen worden gebruikt door het hulpprogramma ServiceModel Metadata Utility (Svcutil.exe) om een WCF-client te genereren en de bijbehorende configuratie die een clienttoepassing kan gebruiken om met de service te communiceren.

De metagegevens die door de service worden weergegeven, bevatten XML-schemadocumenten, die het gegevenscontract van de service definiëren en WSDL-documenten, waarin de methoden van de service worden beschreven.

Wanneer deze functie is ingeschakeld, worden metagegevens voor de service automatisch gegenereerd door WCF door de service en de eindpunten ervan te inspecteren. Als u metagegevens van een service wilt publiceren, moet u het gedrag van metagegevens expliciet inschakelen.

Beveiliging
In WCF omvat vertrouwelijkheid (versleuteling van berichten om afluisteren te voorkomen), integriteit (de middelen voor detectie van manipulatie met het bericht), verificatie (de middelen voor validatie van servers en clients) en autorisatie (het beheer van de toegang tot resources). Deze functies worden geleverd door gebruik te maken van bestaande beveiligingsmechanismen, zoals TLS via HTTP (ook wel HTTPS genoemd), of door een of meer van de verschillende WS-* beveiligingsspecificaties te implementeren.

Transportbeveiligingsmodus
Hiermee geeft u op dat vertrouwelijkheid, integriteit en verificatie worden geleverd door de transportlaagmechanismen (zoals HTTPS). Wanneer u een transport zoals HTTPS gebruikt, heeft deze modus het voordeel om efficiënt te zijn in de prestaties en goed te begrijpen vanwege de prevalentie ervan op internet. Het nadeel is dat dit soort beveiliging afzonderlijk wordt toegepast op elke hop in het communicatiepad, waardoor de communicatie vatbaar is voor een 'man in het midden'-aanval.

Berichtbeveiligingsmodus
Hiermee geeft u op dat beveiliging wordt geboden door een of meer van de beveiligingsspecificaties te implementeren, zoals de specificatie met de naam Web Services Security: SOAP Message Security. Elk bericht bevat de benodigde mechanismen om tijdens de overdracht beveiliging te bieden en de ontvangers in staat te stellen manipulatie te detecteren en de berichten te ontsleutelen. In deze zin wordt de beveiliging ingekapseld binnen elk bericht, wat end-to-end beveiliging biedt voor meerdere hops. Omdat beveiligingsinformatie onderdeel wordt van het bericht, is het ook mogelijk om meerdere soorten referenties op te nemen met het bericht (deze worden claims genoemd). Deze aanpak heeft ook het voordeel dat het bericht veilig kan reizen via elk transport, met inbegrip van meerdere transporten tussen de oorsprong en bestemming. Het nadeel van deze benadering is de complexiteit van de cryptografische mechanismen die worden gebruikt, wat resulteert in gevolgen voor de prestaties.

Transport met de beveiligingsmodus voor berichtreferenties
Hiermee geeft u het gebruik van de transportlaag om vertrouwelijkheid, verificatie en integriteit van de berichten te bieden, terwijl elk van de berichten meerdere referenties (claims) kan bevatten die vereist zijn voor de ontvangers van het bericht.

WS-*
Afkorting voor de groeiende set WS-specificaties (Web Service), zoals WS-Security, WS-ReliableMessaging, enzovoort, die zijn geïmplementeerd in WCF.

Zie ook