Die Windows Communication Foundation (WCF, früherer CodenameIndigo) ist eine dienstorientierte Kommunikationsplattform für verteilte Anwendungen in Microsoft Windows. Sie führt viele Netzwerkfunktionen zusammen und stellt sie den Programmierern solcher Anwendungen standardisiert zur Verfügung.
Die Windows Communication Foundation ist seit .Net-Framework 3.0 ein fester Bestandteil des .NET Frameworks. Die Versionsnummern von WCF orientieren sich hierbei an der Version des .NET Frameworks.
Für das .NET Core Framework (auf dem auch die neueren Version von .NET ab Version 5 basieren) stand WCF in der bisherigen Form zunächst nicht zur Verfügung. Als Alternative empfahl Microsoft die Verwendung von gRPC, welches seit .NET Core 3.0 unterstützt wird.[2][3][4] Zusätzlich soll jedoch die Migration zu .NET Core durch ein Communityprojekt namens CoreWCF erleichtert werden, das im April 2022 mit einer ersten Version freigegeben wurde.[5][6] Es wurde aber zunächst nur eine Teilmenge der Funktionen implementiert.[7]
Der Ort des Dienstes ist, je nach verwendetem Transportschema, der Name des Zielrechners, des Netzwerks oder einer Ressource vom Type Pipe, Communication Port oder Queue.
Das .NET Framework stellt vorgefertigte Bindungen für häufige Anwendungsfälle zur Verfügung, die noch konfiguriert werden können. Auch besteht die Möglichkeit, eigene Bindings zu entwickeln (beispielsweise für das XML-RPC-Protokoll).
Verträge werden zur Entwicklungszeit als Interfaces (Schnittstellen) in einer beliebigen .NET-Sprache verfasst und zur Laufzeit durch die WCF in ein Kommunikationsprotokoll, z.B. SOAP, umgesetzt. Die Verwendung dieses Standards ist maßgeblich für einen plattformunabhängigen Dienstzugriff.
usingSystem;usingSystem.ServiceModel;usingHelloWorld.Contract;usingHelloWorld.Service;namespaceHelloWorld.ConsoleHost{classProgram{staticvoidMain(){using(varhost=newServiceHost(typeof(HelloWorldService),newUri("http://localhost:8000/HelloWorld"))){host.AddServiceEndpoint(typeof(IHelloWorldService),newBasicHttpBinding(),"");host.Open();Console.WriteLine("Service running. Press ENTER to stop.");Console.ReadLine();}}}}
usingSystem;usingSystem.ServiceModel;usingHelloWorld.Contract;usingHelloWorld.Service;namespaceHelloWorld.ConsoleHost{classProgram{staticvoidMain(){using(varhost=newServiceHost(typeof(HelloWorldService))){host.Open();Console.WriteLine("Service running. Press ENTER to stop.");Console.ReadLine();}}}}
Das Verhalten des Service wird in der Datei App.config bzw. Web.config deklariert. Dies erfolgt üblicherweise mit dem Service Configuration Editor (svcconfigeditor.exe) und kann von erfahrenen Entwicklern und Administratoren auch manuell in einem Texteditor konfiguriert werden.
Durch die Aktivierung des Metadatenaustausches (englisch: Metadata-Exchange, kurz „mex“) mittels eines entsprechenden Bindings (z.B.mexHttpBinding, mexHttpsBinding, mexTcpBinding, mexNamedPipeBinding) können die Proxyklassen und die Anwendungskonfiguration mit dem Service Model Metadata Utility (svcutil.exe) automatisch erstellt werden.
Die generierten Proxyklassen und Anwendungskonfiguration können von einem Client sehr einfach konsumiert werden.
usingSystem;usingde.wikipedia.org.wiki;// service namespace as declared in the contractnamespaceHelloWorld.ConsoleClient{classProgram{staticvoidMain(){varproxy=newHelloWorldProxy();// no using block here!varhelloWorld=proxy.HelloWorld();Console.WriteLine(helloWorld);}}}