Optionen für einen Umstieg von WCF, Teil 2
18.11.2019, 00:00 Uhr
Drei WCF-Alternativen
WCF wird spätestens mit .NET 5 zum Auslaufmodell. Die Kriterien für einen Vergleich der Alternativen sind definiert – nun gehen die ersten Kontrahenten an den Start.
Der erste Teil dieser Serie [1] hat eine Reihe von Kriterien vorgestellt, die eine vergleichende Bewertung möglicher Nachfolger für WCF erlauben (vergleiche Tabelle 1). Auf dieser Basis werden nun im Folgenden die ersten drei Kontrahenten eingehender betrachtet, die sich allesamt eng am Original orientieren.
Tabelle 1: Übersicht der Vergleichseigenschaften (Teil 1)
Eigenschaft | Beschreibung | WCF | Core WCF | IpcServiceFramework | Soap Core |
Serverseitige Architektur | |||||
Sprache | In welcher Sprache kann ein Dienst in der Technologie implementiert werden? | C#/.NET | 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 Core 2.2 | .NET 4.6.1, .NET Core 2.0 | .NET 4.6.1, .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) | RPC (0) | RPC (0) | RPC (0) |
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) | Single Enpoint (POST) | Single Endpoint (-) | Single Enpoint (POST) |
Service Definition - Service Contract | Wie, wenn überhaupt, wird die Gesamtmentde der unterstützen Operationen des Dienstes definiert? | C#-Interface mit ServiceContract-Attribut | C# Interface mit ServiceContract-Attribut | C# Interface | C# Interface mit ServiceContract-Attribut |
Service Definition - Operation Contract | Wie wird eine einzelne Operation des Dienstes im Rahmen des Service Contract definiert? | Methode mit OperationContract-Attribut | Methode mit OperationContract-Attribut | Methode | Methode mit OperationContract-Attribut |
Service Definition - Data Contract | Wie werden die Datenstrukturen des Dienstes definiert? | POCOs mit DataContract-/DataMember-Attributen | POCOs mit DataContract-/DataMember-Attributen | POCO | POCOs mit DataContract-/DataMember-Attributen |
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 | Implementierung des Service Contract | Implementierung des Service Contract | Interface-Implementierung des Service Contract |
Metadaten | Ist der Dienst in der Lage, sich selbst zu beschreiben, und wenn ja, in welchem Format? | WSDL | Keine (WSDL noch nicht unterstützt) | Keine | WSDL |
Bindungen | |||||
Transporte | Über welche Kanäle kann der Dienst angeboten werden? | HTTP[S], TCP, Named Pipes, Message Queues | HTTP[S], TCP | TCP, Named Pipes | HTTP[S] |
Protokoll | Wie müssen Nachrichten, die zwischen Client und Server ausgetauscht werden, gestaltet sein? | SOAP | SOAP | Proprietär | SOAP |
Serialisierung | Wie werden Nachrichten für den Versand über den Transport serialisiert? | XML, binär | XML, binär | JSON/byte[] | XML |
Kommunikationsmuster | Welche Anwendungsszenarien unterstützt eine Technologie durch verschiedene Austauschmuster von Nachrichten? | One Way, Request/Response, Publish/Subscribe, Streaming | One Way, Request/Response, Publish/Subscribe (nur via TCP) | One Way, Request/Response | One Way, Request/Response |
Eigenschaft |
Beschreibung | WCF | Core WCF | IpcServiceFramework | Soap Core |
Sprache | In welcher Sprache kann ein Dienst angesprochen werden, das heißt, in welcher Sprache lässt sich das vom Dienst verwendete Transportprotokoll gut ansprechen? | C#/.NET, JS/TS nur bedingt, Cross-Plattform | C#/.NET, JS/TS nur bedingt, Cross-Plattform | C#/.NET | C#/.NET, JS/TS nur bedingt, Cross-Plattform |
Einsatzgebiet | Wo werden die Clients dieses Dienstes überwiegend eingesetzt? | Fat Client, Backend | Fat Client, Backend | Fat Client, Backend | Fat Client, Backend |
Aufruf | Über welchen Weg ruft eine Applikation den Service auf, das heißt, wie ist der Client implementiert? | Auto-generated Proxy, Generischer Proxy | Generischer Proxy | Generischer Proxy | Auto-generated Proxy, Generischer Proxy |
Tabelle 1: Übersicht der Vergleichseigenschaften (Teil 1)
Eigenschaft | Beschreibung | WCF | Core WCF | IpcServiceFramework | Soap Core |
Serverseitige Architektur | |||||
Sprache | In welcher Sprache kann ein Dienst in der Technologie implementiert werden? | C#/.NET | 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 Core 2.2 | .NET 4.6.1, .NET Core 2.0 | .NET 4.6.1, .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) | RPC (0) | RPC (0) | RPC (0) |
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) | Single Enpoint (POST) | Single Endpoint (-) | Single Enpoint (POST) |
Service Definition - Service Contract | Wie, wenn überhaupt, wird die Gesamtmentde der unterstützen Operationen des Dienstes definiert? | C#-Interface mit ServiceContract-Attribut | C# Interface mit ServiceContract-Attribut | C# Interface | C# Interface mit ServiceContract-Attribut |
Service Definition - Operation Contract | Wie wird eine einzelne Operation des Dienstes im Rahmen des Service Contract definiert? | Methode mit OperationContract-Attribut | Methode mit OperationContract-Attribut | Methode | Methode mit OperationContract-Attribut |
Service Definition - Data Contract | Wie werden die Datenstrukturen des Dienstes definiert? | POCOs mit DataContract-/DataMember-Attributen | POCOs mit DataContract-/DataMember-Attributen | POCO | POCOs mit DataContract-/DataMember-Attributen |
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 | Implementierung des Service Contract | Implementierung des Service Contract | Interface-Implementierung des Service Contract |
Metadaten | Ist der Dienst in der Lage, sich selbst zu beschreiben, und wenn ja, in welchem Format? | WSDL | Keine (WSDL noch nicht unterstützt) | Keine | WSDL |
Bindungen | |||||
Transporte | Über welche Kanäle kann der Dienst angeboten werden? | HTTP[S], TCP, Named Pipes, Message Queues | HTTP[S], TCP | TCP, Named Pipes | HTTP[S] |
Protokoll | Wie müssen Nachrichten, die zwischen Client und Server ausgetauscht werden, gestaltet sein? | SOAP | SOAP | Proprietär | SOAP |
Serialisierung | Wie werden Nachrichten für den Versand über den Transport serialisiert? | XML, binär | XML, binär | JSON/byte[] | XML |
Kommunikationsmuster | Welche Anwendungsszenarien unterstützt eine Technologie durch verschiedene Austauschmuster von Nachrichten? | One Way, Request/Response, Publish/Subscribe, Streaming | One Way, Request/Response, Publish/Subscribe (nur via TCP) | One Way, Request/Response | One Way, Request/Response |
Eigenschaft |
Beschreibung | WCF | Core WCF | IpcServiceFramework | Soap Core |
Sprache | In welcher Sprache kann ein Dienst angesprochen werden, das heißt, in welcher Sprache lässt sich das vom Dienst verwendete Transportprotokoll gut ansprechen? | C#/.NET, JS/TS nur bedingt, Cross-Plattform | C#/.NET, JS/TS nur bedingt, Cross-Plattform | C#/.NET | C#/.NET, JS/TS nur bedingt, Cross-Plattform |
Einsatzgebiet | Wo werden die Clients dieses Dienstes überwiegend eingesetzt? | Fat Client, Backend | Fat Client, Backend | Fat Client, Backend | Fat Client, Backend |
Aufruf | Über welchen Weg ruft eine Applikation den Service auf, das heißt, wie ist der Client implementiert? | Auto-generated Proxy, Generischer Proxy | Generischer Proxy | Generischer Proxy | Auto-generated Proxy, Generischer Proxy |
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