Quelle: dotnetpro
Optionen für einen Umstieg von WCF, Teil 3 16.12.2019, 00:00 Uhr

Umdenken ist gefragt

Bisher wurden drei Technologien für die WCF-Nachfolge vorgestellt – alle nah am Original. Die heutigen zwei Kontrahenten kommen auf anderen Wegen zum selben Ziel.
Im dritten Teil der Serie rund um die Nachfolge von WCF gehen ASP.NET Core Web API und ServiceStack an den Start. Wie alle Technologien werden sie anhand der Kriterien aus Tabelle 1 bewertet. Der Quellcode zu den vorhergehenden Teilen und diesem Teil befindet sich wieder auf GitHub [1].
Tabelle 1: Übersicht der Vergleichseigenschaften
Eigenschaft Beschreibung WCF ASP.NET Web API ServiceStack
Serverseitige Architektur
Sprache In welcher Sprache kann ein Dienst in der Technologie implementiert werden? C#/.NET C#/.NET C#/.NET
Plattform Welche Plattform (SDK, Runtime) in welcher minimalen Version wird benötigt, um Dienste zu implementieren? .NET 3.0 .NET 4.0, .NET Core 1.0 .NET 4.5, .NET Core 2.0
Architekturstil (RMM-Level) Handelt es sich um ein RPC-Framework oder um ein RESTful-basiertes System, und welche RMM-Level können maximal erreicht werden? RPC (0) RESTful (1-3) RPC (0), RESTful (1–3)
Adressierung (verwendete HTTP-Verben) Wie wird der Dienst adressiert? Gibt es nur einen Endpunkt für alle Aktionen, oder können Aktionen separat adressiert werden? Im Fall eines HTTP-Transports: Welche Verben können genutzt werden? Single Endpoint, oft SVC-Datei (POST) URI pro Controller/Action (alle) URI pro Controller/Action (alle), Message Queues
Service Definition: Service Contract Wie, wenn überhaupt, wird die Gesamtmentde der unterstützten Operationen des Dienstes definiert? C#-Interface mit ServiceContract-Attribut Keine explizite Definition Request/Response DTOs
Service Definition: Operation Contract Wie wird eine einzelne Operation des Dienstes im Rahmen des Service Contract definiert? Methode mit OperationContract-Attribut Methoden mit Attributen für Verben/Routing Request/Response DTOs
Service Definition: Data Contract Wie werden die Datenstrukturen des Dienstes definiert? POCOs mit DataContract-/DataMember Attributen POCO Request/Response DTOs
Service-Implementierung Wie wird ein Service konkret implementiert, also wie wird die Service-Definition in lauffähige Software überführt? Interface-Implementierung des Service Contract Ableitung von Basisklasse Controller, Implementierung der Actions als Methoden Ableitung von Basisklasse Service, Implementierung von Methoden, die Request-DTOs akzeptieren und Response-DTOs liefern
Metadaten Ist der Dienst in der Lage, sich selbst zu beschreiben, und wenn ja, in welchem Format? WSDL Keine, OAS Proprietär, OAS
Bindungen
Transporte Über welche Kanäle kann der Dienst angeboten werden? HTTP[S], TCP, Named Pipes, Message Queues HTTP[S] HTTP[S], Message Queues
Protokoll Wie müssen Nachrichten, die zwischen Client und Server ausgetauscht werden, gestaltet sein? SOAP HTTP HTTP [SOAP, aber nicht in .NET Core]
Serialisierung Wie werden Nachrichten für den Versand über den Transport serialisiert? XML, binär JSON, XML, weitere Content-Types sind möglich JSON, XML
Kommunikationsmuster Welche Anwendungsszenarien unterstützt eine Technologie durch verschiedene Austauschmuster von Nachrichten? One Way, Request/Response, Publish/Subscribe, Streaming One Way, Request/Response, Pub/Sub (Web Sockets, SSE) One Way Request/Response, Pub/Sub (Server Send Events)
Clientseitige Architektur
Sprache In welcher Sprache kann ein Dienst angesprochen werden, das heißt, in welcher Sprache lässt sich das vom Dienst verwendete Transport/Protokoll gut ansprechen? C#/.NET, JS/TS nur bedingt, Cross-Plattform C#/.NET/JavaScript/TypeScript, Cross-Platform C#/.NET, JavaScript/TypeScript, Cross-Platform
Einsatzgebiet Wo werden die Clients dieses Diensts überwiegend eingesetzt? Fat Client, Backend Fat Client, Backend, Browser Fat Client, Backend, Browser
Aufruf Über welchen Weg ruft eine Applikation den Service auf, das heißt, wie ist der Client implementiert? Auto-generated Proxy, Generischer Proxy HTTP-Request Generischer Proxy, HTTP-Request
Tabelle 1: Übersicht der Vergleichseigenschaften
Eigenschaft Beschreibung WCF ASP.NET Web API ServiceStack
Serverseitige Architektur
Sprache In welcher Sprache kann ein Dienst in der Technologie implementiert werden? C#/.NET C#/.NET C#/.NET
Plattform Welche Plattform (SDK, Runtime) in welcher minimalen Version wird benötigt, um Dienste zu implementieren? .NET 3.0 .NET 4.0, .NET Core 1.0 .NET 4.5, .NET Core 2.0
Architekturstil (RMM-Level) Handelt es sich um ein RPC-Framework oder um ein RESTful-basiertes System, und welche RMM-Level können maximal erreicht werden? RPC (0) RESTful (1-3) RPC (0), RESTful (1–3)
Adressierung (verwendete HTTP-Verben) Wie wird der Dienst adressiert? Gibt es nur einen Endpunkt für alle Aktionen, oder können Aktionen separat adressiert werden? Im Fall eines HTTP-Transports: Welche Verben können genutzt werden? Single Endpoint, oft SVC-Datei (POST) URI pro Controller/Action (alle) URI pro Controller/Action (alle), Message Queues
Service Definition: Service Contract Wie, wenn überhaupt, wird die Gesamtmentde der unterstützten Operationen des Dienstes definiert? C#-Interface mit ServiceContract-Attribut Keine explizite Definition Request/Response DTOs
Service Definition: Operation Contract Wie wird eine einzelne Operation des Dienstes im Rahmen des Service Contract definiert? Methode mit OperationContract-Attribut Methoden mit Attributen für Verben/Routing Request/Response DTOs
Service Definition: Data Contract Wie werden die Datenstrukturen des Dienstes definiert? POCOs mit DataContract-/DataMember Attributen POCO Request/Response DTOs
Service-Implementierung Wie wird ein Service konkret implementiert, also wie wird die Service-Definition in lauffähige Software überführt? Interface-Implementierung des Service Contract Ableitung von Basisklasse Controller, Implementierung der Actions als Methoden Ableitung von Basisklasse Service, Implementierung von Methoden, die Request-DTOs akzeptieren und Response-DTOs liefern
Metadaten Ist der Dienst in der Lage, sich selbst zu beschreiben, und wenn ja, in welchem Format? WSDL Keine, OAS Proprietär, OAS
Bindungen
Transporte Über welche Kanäle kann der Dienst angeboten werden? HTTP[S], TCP, Named Pipes, Message Queues HTTP[S] HTTP[S], Message Queues
Protokoll Wie müssen Nachrichten, die zwischen Client und Server ausgetauscht werden, gestaltet sein? SOAP HTTP HTTP [SOAP, aber nicht in .NET Core]
Serialisierung Wie werden Nachrichten für den Versand über den Transport serialisiert? XML, binär JSON, XML, weitere Content-Types sind möglich JSON, XML
Kommunikationsmuster Welche Anwendungsszenarien unterstützt eine Technologie durch verschiedene Austauschmuster von Nachrichten? One Way, Request/Response, Publish/Subscribe, Streaming One Way, Request/Response, Pub/Sub (Web Sockets, SSE) One Way Request/Response, Pub/Sub (Server Send Events)
Clientseitige Architektur
Sprache In welcher Sprache kann ein Dienst angesprochen werden, das heißt, in welcher Sprache lässt sich das vom Dienst verwendete Transport/Protokoll gut ansprechen? C#/.NET, JS/TS nur bedingt, Cross-Plattform C#/.NET/JavaScript/TypeScript, Cross-Platform C#/.NET, JavaScript/TypeScript, Cross-Platform
Einsatzgebiet Wo werden die Clients dieses Diensts überwiegend eingesetzt? Fat Client, Backend Fat Client, Backend, Browser Fat Client, Backend, Browser
Aufruf Über welchen Weg ruft eine Applikation den Service auf, das heißt, wie ist der Client implementiert? Auto-generated Proxy, Generischer Proxy HTTP-Request Generischer Proxy, HTTP-Request

Jetzt 1 Monat kostenlos testen!

Sie wollen zukünftig auch von den Vorteilen eines plus-Abos profitieren? Werden Sie jetzt dotnetpro-plus-Kunde.
  • + Digitales Kundenkonto,
  • + Zugriff auf das digitale Heft,
  • + Zugang zum digitalen Heftarchiv,
  • + Auf Wunsch: Weekly Newsletter,
  • + Sämtliche Codebeispiele im digitalen Heftarchiv verfügbar