.net + Windows + gRPC library = ?
Faire le choix de gRPC aujourd'hui, c'est faire le chois de la performance, de la modernité, et tout un tas de belles choses. Quand on se documente sur gRPC, on aurait presque l'impression qu'il n'y a que des avantages.
Attention : Spoiler alerte, l'article qui suit va peut-être vous éviter de faire de grosses erreurs.
Il existe un sujet qui peut poser des problèmes lors de la mise en production d'une application gRPC. Il s'agit de HTTP2. Ce standard n'est pas forcément supporté par votre OS, votre Runtime ou votre librairie gRPC. Voilà donc un sujet qu'il faut maitriser avant de se lancer.
Plutôt que de partir dans une longue litanie d'informations et détails indigestes, j'ai fait le choix de créer quelques tableaux. J'espère qu'ils seront suffisamment clairs et explicites.
J'ai découpé l'information suivant les scénarios suivants :
- Application serveur gRPC (HTTP2)
- Application client gRPC (HTTP2)
- Application serveur gRPC Web (HTTP1)
- Application client gRPC Web (HTTP1)
Côté technologies, je me suis arrêté aux versions de Windows et .net que l'on rencontre encore régulièrement aujourd'hui.
Rappel : Même si ces tableaux font référence à Grpc.Core, il faut se rappeler que cette implémentation n'est plus conseillée.
Application serveur gRPC (HTTP2)
Windows 2008R2 | Windows 2012 | Windows 2012R2 | Windows 2016 | Windows 2019 | |
---|---|---|---|---|---|
.net Framework 4.6.1 - 4.8 | impossible | impossible | impossible | Grpc.Core | Grpc.Core |
.net core 2.0 - 2.1 | impossible | impossible | impossible | Grpc.Core | Grpc.Core |
.net core 3.0 - 3.1 | impossible | impossible | impossible | Grpc.AspNetCore | Grpc.AspNetCore |
.net 5 | impossible | impossible | impossible | Grpc.AspNetCore | Grpc.AspNetCore |
IIS ne supportant pas HTTP2, la solution la plus simple consistera à utiliser directement Kestrel avec .net Core et .net 5. Pour .net Framework, une application console fera l'affaire.
Application client gRPC (HTTP2)
Windows 7 | Windows 8 – 8.1 | Windows 10 | Windows 10 Build 19622 ou version ultérieure | |
---|---|---|---|---|
.net Framework 4.6.1 - 4.8 | impossible | impossible | Grpc.Core | Grpc.Net.Client avec WinHttpHandler |
.net core 2.0 - 2.1 | impossible | impossible | Grpc.Core | Grpc.Core |
.net core 3.0 - 3.1 | Grpc.Net.Client | Grpc.Net.Client | Grpc.Net.Client | Grpc.Net.Client |
.net 5 | Grpc.Net.Client | Grpc.Net.Client | Grpc.Net.Client | Grpc.Net.Client |
Application serveur gRPC Web (HTTP1)
Windows 2008R2 | Windows 2012 | Windows 2012R2 | Windows 2016 | Windows 2019 | |
---|---|---|---|---|---|
.net Framework 4.6.1 - 4.8 | impossible | impossible | impossible | impossible | impossible |
.net core 2.0 - 2.1 | impossible | impossible | impossible | impossible | impossible |
.net core 3.0 - 3.1 | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web |
.net 5 | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web | Grpc.AspNetCore.Web |
Application client gRPC Web (HTTP1)
Windows 7 | Windows 8 – 8.1 | Windows 10 | Windows 10 Build 19622 ou version ultérieure | |
---|---|---|---|---|
.net Framework 4.6.1 - 4.8 | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web |
.net core 2.0 - 2.1 | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web |
.net core 3.0 - 3.1 | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web |
.net 5 | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web | Grpc.Net.Client.Web |