Usare il client gRPC con .NET Standard 2.0

Di James Newton-King

Questo articolo illustra come usare il client GRPC .NET con implementazioni .NET che supportano .NET Standard 2.0.

Implementazioni di .NET

Le implementazioni .NET seguenti (o versioni successive) supportano Grpc.Net.Client , ma non dispongono del supporto completo per HTTP/2:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • Piattaforma UWP (Universal Windows Platform) 10.0.16299
  • Unity 2018.1

Il client .NET gRPC può chiamare i servizi da queste implementazioni .NET con una configurazione aggiuntiva.

Configurazione di HttpHandler

È necessario configurare un provider HTTP usando GrpcChannelOptions.HttpHandler. Se un gestore non è configurato, viene generato un errore:

System.PlatformNotSupportedException: gRPC richiede una configurazione aggiuntiva per effettuare correttamente chiamate RPC in implementazioni .NET che non dispongono del supporto per gRPC su HTTP/2. È necessario specificare un provider HTTP usando GrpcChannelOptions.HttpHandler. Il provider HTTP configurato deve supportare HTTP/2 o essere configurato per l'uso di gRPC-Web.

Le implementazioni di .NET che non supportano HTTP/2, ad esempio UWP, Xamarin e Unity, possono usare gRPC-Web come alternativa.

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" });

I client possono essere creati anche usando la factory client gRPC. Un provider HTTP viene configurato usando il ConfigurePrimaryHttpMessageHandler metodo di estensione.

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

Per altre informazioni, vedere Configurare gRPC-Web con il client gRPC .NET.

Importante

gRPC-Web richiede il client e il server per supportarlo. gRPC-Web può essere configurato rapidamente da un server ASP.NET Core gRPC. Altre implementazioni del server gRPC richiedono un proxy per supportare gRPC-Web.

.NET Framework

.NET Framework offre un supporto limitato per gRPC su HTTP/2. Per abilitare gRPC su HTTP/2 in .NET Framework, configurare il canale per l'uso di WinHttpHandler.

Requisiti e restrizioni per l'uso WinHttpHandlerdi :

  • Windows 11 o versione successiva, Windows Server 2022 o versione successiva.
  • Riferimento alla System.Net.Http.WinHttpHandler versione 6.0.1 o successiva.
  • Configurare WinHttpHandler nel canale usando GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 o versioni successive.
  • Sono supportate solo le chiamate gRPC di streaming unario e server.
  • Sono supportate solo le chiamate gRPC su TLS.
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" });

core-library C# gRPC

Un'opzione alternativa per .NET Framework e Xamarin consiste nell'usare la libreria core gRPC C# per effettuare chiamate gRPC. gRPC C# core-library è:

  • Libreria di terze parti che supporta l'esecuzione di chiamate gRPC su HTTP/2 in .NET Framework e Xamarin.
  • Non supportato da Microsoft.
  • In modalità di manutenzione e sarà deprecato a favore di gRPC per .NET.
  • Non consigliato per le nuove app.

Risorse aggiuntive