Usare il client gRPC con .NET Standard 2.0

Nota

Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 9 di questo articolo.

Avviso

Questa versione di ASP.NET Core non è più supportata. Per altre informazioni, vedere Criteri di supporto di .NET e .NET Core. Per la versione corrente, vedere la versione .NET 8 di questo articolo.

Importante

Queste informazioni si riferiscono a un prodotto non definitive che può essere modificato in modo sostanziale prima che venga rilasciato commercialmente. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.

Per la versione corrente, vedere la versione .NET 9 di questo articolo.

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

Un provider HTTP deve essere configurato 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 anche essere creati usando la factory client gRPC. Un provider HTTP viene configurato usando il metodo di ConfigurePrimaryHttpMessageHandler 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 ha 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 di WinHttpHandler:

  • Windows 11 o versione successiva, Windows Server 2019 o versione successiva.
    • Il client gRPC è completamente supportato in Windows 11 o versione successiva.
    • Il client gRPC è parzialmente supportato in Windows Server 2019 e Windows Server 2022. Sono supportati metodi di streaming unari e server. I metodi di streaming bidirezionali e client non sono supportati.
  • 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 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 gRPC C#

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 verrà deprecato a favore di gRPC per .NET.
  • Non consigliato per le nuove app.

Risorse aggiuntive