Windows Communication Foundation: WCF-Dienste für das moderne .NET

Mit dem in Version 1.0 veröffentlichten Community-Projekt CoreWCF können Kunden bestehende WCF-Dienste leichter nach .NET Core, .NET 5 und .NET 6 portieren.

Lesezeit: 6 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 11 Beiträge

(Bild: whiteMocca/Shutterstock.com)

Von
  • Dr. Holger Schwichtenberg

Nach langer Vorbereitung und einem 0.1-Release im Febraur 2021 ist CoreWCF in Version 1.0 erschienen. Die Windows Communication Foundation (WCF) war der große Microsoft-Hype Mitte der 2000er Jahre. WCF ist eine flexible Interprozess-Kommunikationsbibliothek für .NET, bei der sich Entwickler einen Kommunikationskanal aus verschiedenen Protokollen wie HTTP, TCP, UDP, Named Pipes und MSMQ, Formaten wie SOAP, POX, Binär, MTOM, ATOM, RSS und JSON sowie Kommunikationsfeatures wie Authentifizierung, Verschlüsselung und Zuverlässigkeit individuell zusammenzustellen können. WCF bietet dabei sowohl WS-*-Standards als auch proprietäre Funktionen von Microsoft.

WCF bietet einen großen Warenkorb von kombinierbaren Kommunikationsfeatures

Während Microsoft die Client-Bibliothek für WCF (Windows Communication Foundation Client Libraries) beim Umbau von .NET Framework zu .NET Core übernommen hat, steht die Serverseite von WCF seit 2019 auf der Liste der Klassen, die Microsoft nicht mehr ins moderne .NET migrieren will. Microsoft verwies die Entwickler darauf, REST-basierte Web-APIs oder gRPC-Dienste statt WCF zu nutzen, was einen erheblichen Migrationsaufwand für bestehende WCF-basierte Services bedeutete.

Bereits 2019 gründete sich das Community-Projekt "CoreWCF" unter Leitung von Matt Connew, um den WCF-Server in die moderne .NET-Welt zu überführen. Microsoft unterstützte es mit der Bereitstellung des WCF-Quellcodes als Open Source und der Schirmherrschaft der .NET Foundation. Matt Connew ist zwar bei Microsoft angestellt, hat aber lange Zeit offensichtlich wenig Zeit und Unterstützung für CoreWCF gehabt.

In einem Video aus dem Februar 2022 sagte er, dass er nur etwa 20 Prozent seiner Arbeitszeit im CoreWCF-Projekt verbracht hat – die übrige Zeit verbrachte er mit der Pflege von WCF im .NET Framework und der WCF-Clients in modernem .NET. Auch wenn es dann Hilfe aus dem AWS-Team von Amazon gab, dümpelte CoreWCF mit der Bemerkung "Please note that right now, this port is not production ready." vor sich hin. Ein erstes Release 0.1 gab es erst im Februar 2021. Die Zahl der Beiträge aus anderen Unternehmen wuchs. Nun ist endlich die erste Hauptversion erschienen.

Dabei bietet CoreWCF 1.0 – wie schon 2019 angekündigt – zunächst nicht alle Funktionen von WCF, sondern konzentriert sich auf die am häufigsten genutzten Kommunikationsszenarien. Diese fasst es zu sogenannten "Bindings" zusammen.

Übersicht über WCF-Bindings in der klassischen Implementierung

(Bild: Microsoft)

Vollständig unterstützte Bindungen in CoreWCF 1.0 sind BasicHttpBinding (HTTP/HTTPS mit SOAP), WebHttpBinding (HTTP/HTTPS mit beliebigem XML oder JSON) und NetHttpBinding (HTTP/HTTPS mit binärer Serialisierung). Bei NetTcpBinding (TCP/binär) und WSHttpBinding (HTTPS/SOAP) sowie WSFederationHttpBinding (HTTPS/SOAP mit WS-Federation) gibt es partielle Unterstützung. So wird zum Beispiel Verschlüsselung nur auf Transportprotokollebene, nicht aber auf Nachrichtenebene mit WS-Security unterstützt. Bei der Authentifizierung können Entwickler zwischen Zertifikaten, Benutzername/Kennwort und der integrierten Windows-Authentifizierung wählen, wobei sich die Konfiguration dafür geändert hat.

Das Release bietet zwar Metadaten mit WSDL, aber kein Message Queuing, keine verteilten Transaktionen und kein Tracing. Die XML-basierten Konfigurationsdateien und die Erweiterbarkeit von WCF ist teilweise implementiert. Metadaten mit WSDL werden unterstützt, aber mit einigen Unterschieden bei der Aktivierung. Einige Features in CoreWCF 1.0 sind vollständig neu und existieren nicht im Original-WCF, darunter das Verwenden von OpenAPI-Medadaten im WebHttpBinding und Dependency Injection für die Klassen HttpContext, HttpRequest und HttpResponse.

Die Implementierung von CoreWCF steht auf GitHub und NuGet bereit. CoreWCF 1.0 basiert auf .NET Standard 2.0 und läuft daher in .NET Framework ab Version 4.6.2, .NET Core ab Version 2.0 sowie .NET 5.0 und .NET 6.0. Während das ursprüngliche WCF unabhängig von ASP.NET war, basiert CoreWCF auf ASP.NET Core und setzt die Installation der zugehörigen Runtime voraus (auch unter .NET Framework – hier läuft höchstens Version ASP.NET Core 2.2).

Bemerkenswert in dem Blogeintrag zu CoreWCF 1.0 ist die Ankündigung, dass Microsoft ab sofort technischen Support für CoreWCF anbietet, auch wenn das Projekt weiterhin kein offizielles Microsoft-Produkt darstellt und nicht als Teil des .NET SDK ausgeliefert werden wird.

Hilfe gibt es aber nur für diejenigen Versionen, die bei Microsoft noch offiziell im Support sind, also ASP.NET Core 2.1 (nicht die neuere Version 2.2) auf .NET Framework, ASP.NET Core 3.1 auf .NET Core 3.1 (noch bis 3.12.2022), ASP.NET Core 5.0 auf .NET 5.0 (nur noch bis Ende nächster Woche) und ASP.NET Core 6.0 auf .NET 6.0 (bis November 2024).

Microsoft-Mitarbeiter Sam Spencer betont in seinem Blogeintrag aber explizit, dass Microsoft mit dem Support-Angebot Entwickler nicht etwa motivieren will, neue Projekte mit CoreWCF zu starten, sondern CoreWCF als Hilfe bei der Umstellung von .NET Framework auf das moderne .NET sieht.

Tatsächlich können mit CoreWCF viele klassische .NET-Projekte mit deutlich weniger Aufwand umgestellt werden und der offizielle Microsoft-Support für CoreWCF erleichtert dessen Einsatz in vielen Unternehmen, insbesondere in großen Konzernen mit Restriktionen beim Einsatz von Community-Komponenten.

Matt Connew betont in einem Blogeintrag zu CoreWCF 1.0, dass "Version 1.0" nicht bedeute, dass man problemlos und ohne Aufwand alle WCF-Dienste umstellen könne, sondern dass er die Versionsnummer 1.0 an dem Punkt vergeben habe, an dem er glaube, dass CoreWCF für einen großen Teil der Kunden nützlich und einsatzbereit sei. Er ruft in seinem Blogeintrag dazu auf, dass mehr Unternehmen Entwicklerressourcen für die Arbeit an den fehlenden Funktionen in CoreWCF abstellen. Auch wenn mittlerweile schon mehr als die Hälfte der Beiträge zu CoreWCF nicht mehr von Matt Connew stammen, fehlt es offensichtlich immer noch an Arbeitskraft.

Bericht über die Neuerungen rund um CoreWCF in der Reihe ON.NET

Eine offizielle Dokumentation zu CoreWCF existiert nicht. Microsofts-Blogeintrag bietet eine Anleitung für die ersten Schritte. Auf GitHub gibt es ein paar Blogeinträge von Matt Connew. Bei YouTube findet man ein rund 19-minütiges Video in der Reihe "ON.NET". Die Dokumentation zum klassischen WCF findet sich bei Microsoft.

(rme)