gRPC nelle piattaforme supportate da .NET

Di James Newton-King

Questo articolo illustra i requisiti e le piattaforme supportate per l'uso di gRPC con .NET. Esistono requisiti diversi per i due principali carichi di lavoro gRPC:

Formati di collegamento

gRPC sfrutta le funzionalità avanzate disponibili in HTTP/2. HTTP/2 non è supportato ovunque, ma per gRPC è disponibile un secondo formato wire-format con HTTP/1.1:

  • application/grpc - gRPC su HTTP/2 è il modo in cui viene in genere usato gRPC.
  • application/grpc-web - gRPC-Web modifica il protocollo gRPC in modo che sia compatibile con HTTP/1.1. gRPC-Web può essere usato in più posizioni. gRPC-Web può essere usato dalle app browser e nelle reti senza il supporto completo per HTTP/2. Due funzionalità gRPC avanzate non sono più supportate: streaming client e streaming bidirezionale.

gRPC in .NET supporta entrambi i formati wire. application/grpc viene usato per impostazione predefinita. gRPC-Web deve essere configurato nel client e nel server per le chiamate gRPC-Web riuscite. Per informazioni sulla configurazione di gRPC-Web, vedere gRPC-Web in ASP.NET Core app gRPC.

ASP.NET Core requisiti del server gRPC

L'hosting di servizi gRPC con ASP.NET Core richiede .NET Core 3.x o versione successiva.

  • .NET 5 o versione successiva
  • .NET Core 3

ASP.NET Core servizi gRPC possono essere ospitati in tutti i sistemi operativi supportati da .NET Core.

  • Windows
  • Linux
  • macOS†

macOS non supporta l'hosting di app ASP.NET Core con HTTPS.

Server di ASP.NET Core supportati

Sono supportati tutti i server ASP.NET Core predefiniti.

  • Kestrel
  • TestServer
  • IIS†
  • HTTP.sys†

†Requires .NET 5 e Windows 11 Build 22000 o Windows Server 2022 Build 20348 o versioni successive.

Per informazioni sulla configurazione dei server di ASP.NET Core per l'esecuzione di gRPC, vedere gRPC services with ASP.NET Core (Servizi gRPC con ASP.NET Core).

Servizi di Azure

†Servizio app di Azure non supporta l'hosting di gRPC su HTTP/2 ovunque. Il supporto è attualmente sperimentale. gRPC-Web è un'alternativa compatibile disponibile ovunque.

Per informazioni sulla distribuzione di Servizio app di Azure, vedere How-to deploy a .NET 6 gRPC app on servizio app (Come distribuire un'app .NET 6 gRPC in servizio app). Questa pagina illustra la distribuzione di gRPC che usa HTTP/2 per servizio app che è sperimentale e non disponibile in tutti i data center di Azure.

Il lavoro è in corso per migliorare il supporto per gRPC con HTTP/2 in Servizio app di Azure. Per altre informazioni, vedere questo problema in GitHub.

Requisiti del client .NET gRPC

Il pacchetto Grpc.Net.Client supporta le chiamate gRPC su HTTP/2 in .NET Core 3 e .NET 5 o versione successiva.

Il supporto limitato è disponibile per gRPC su HTTP/2 in .NET Framework. Altre versioni di .NET, ad esempio UWP, Xamarin e Unity non hanno il supporto HTTP/2 necessario e devono usare invece gRPC-Web.

Nella tabella seguente sono elencate le implementazioni di .NET e il relativo supporto client gRPC:

Implementazione .NET gRPC su HTTP/2 gRPC-Web
.NET 5 o versione successiva ✔️ ✔️
.NET Core 3 ✔️ ✔️
.NET Core 2.1 ✔️
.NET Framework 4.6.1 ⚠️† ✔️
Blazor WebAssembly ✔️
Mono 5.4 ✔️
Xamarin.iOS 10.14 ✔️
Xamarin.Android 8.0 ✔️
Piattaforma UWP (Universal Windows Platform) 10.0.16299 ✔️
Unity 2018.1 ✔️

†.NET Framework richiede la configurazione di WinHttpHandler e Windows 11 o versione successiva.

L'uso Grpc.Net.Client di in .NET Framework o con gRPC-Web richiede una configurazione aggiuntiva. Per altre informazioni, vedere Usare il client gRPC con .NET Standard 2.0.

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.

Risorse aggiuntive