Partager via


Utiliser le client gRPC avec .NET Standard 2.0

Par James Newton-King

Cet article explique comment utiliser le client .NET gRPC avec des implémentations .NET qui prennent en charge .NET Standard 2.0.

Implémentations de .NET

Les implémentations .NET suivantes (ou ultérieures) prennent en charge Grpc.Net.Client , mais ne prennent pas entièrement en charge HTTP/2 :

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • Plateforme Windows universelle 10.0.16299
  • Unity 2018.1

Le client .NET gRPC peut appeler des services à partir de ces implémentations .NET avec une configuration supplémentaire.

Configuration de HttpHandler

Un fournisseur HTTP doit être configuré à l’aide de GrpcChannelOptions.HttpHandler. Si un gestionnaire n’est pas configuré, une erreur est générée :

System.PlatformNotSupportedException: gRPC nécessite une configuration supplémentaire pour effectuer correctement des appels RPC sur des implémentations .NET qui ne prennent pas en charge gRPC sur HTTP/2. Un fournisseur HTTP doit être spécifié à l’aide de GrpcChannelOptions.HttpHandler. Le fournisseur HTTP configuré doit prendre en charge HTTP/2 ou être configuré pour utiliser gRPC-Web.

Les implémentations .NET qui ne prennent pas en charge HTTP/2, telles qu’UWP, Xamarin et Unity, peuvent utiliser gRPC-Web comme alternative.

var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new GrpcWebHandler(new HttpClientHandler())
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

Les clients peuvent également être créés à l’aide de la fabrique de client gRPC. Un fournisseur HTTP est configuré à l’aide de la ConfigurePrimaryHttpMessageHandler méthode d’extension.

builder.Services
    .AddGrpcClient<Greet.GreeterClient>(options =>
    {
        options.Address = new Uri("https://localhost:5001");
    })
    .ConfigurePrimaryHttpMessageHandler(
        () => new GrpcWebHandler(new HttpClientHandler()));

Pour plus d’informations, consultez Configurer gRPC-Web avec le client .NET gRPC.

Important

gRPC-Web nécessite que le client et le serveur le prennent en charge. gRPC-Web peut être rapidement configuré par un serveur ASP.NET Core gRPC. D’autres implémentations de serveur gRPC nécessitent un proxy pour prendre en charge gRPC-Web.

.NET Framework

.NET Framework a une prise en charge limitée de gRPC sur HTTP/2. Pour activer gRPC sur HTTP/2 sur .NET Framework, configurez le canal pour utiliser WinHttpHandler.

Exigences et restrictions relatives à l’utilisation de WinHttpHandler :

  • Windows 11 ou version ultérieure, Windows Server 2019 ou version ultérieure.
    • Le client gRPC est entièrement pris en charge sur Windows 11 ou version ultérieure.
    • Le client gRPC est partiellement pris en charge sur Windows Server 2019 et Windows Server 2022. Les méthodes de diffusion en continu unaire et serveur sont prises en charge. Les méthodes de diffusion en continu client et bidirectionnelle ne sont pas prises en charge.
  • Référence à System.Net.Http.WinHttpHandler version 6.0.1 ou ultérieure.
  • Configurez WinHttpHandler sur le canal à l’aide de GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 ou ultérieur.
  • Seuls les appels gRPC via TLS sont pris en charge.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new WinHttpHandler()
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

Bibliothèque principale gRPC C#

Une autre option pour .NET Framework et Xamarin a été d’utiliser la bibiolthèque principale gRPC C# pour effectuer des appels gRPC. La bibliothèque principale C# gRPC est la suivante :

  • Bibliothèque tierce qui prend en charge l’exécution d’appels gRPC sur HTTP/2 sur .NET Framework et Xamarin.
  • Non prise en charge par Microsoft.
  • En mode maintenance et sera déconseillée en faveur de gRPC pour .NET.
  • Non recommandée pour les nouvelles applications.

Ressources supplémentaires