Panoramica di gRPC in .NET
Nota
Questa non è la versione più recente di questo articolo. Per la versione corrente, vedere la versione .NET 8 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 8 di questo articolo.
gRPC è un framework RPC indipendente dal linguaggio a elevate prestazioni.
I principali vantaggi di gRPC sono:
- Framework RPC leggero e moderno ad alte prestazioni.
- Sviluppo di API con priorità al contratto usando i buffer del protocollo per impostazione predefinita e implementazioni indipendenti dal linguaggio.
- Strumenti disponibili per molte linguaggi consentono di generare client e server fortemente tipizzati.
- Supporto per chiamate client, server e di streaming bidirezionale.
- Utilizzo di rete ridotto grazie alla serializzazione binaria Protobuf.
Questi vantaggi rendono gRPC ideale per:
- Microservizi leggeri in cui l'efficienza è fondamentale.
- Sistemi poliglotti che richiedono l'uso di più linguaggi per lo sviluppo.
- Servizi in tempo reale da punto a punto che devono gestire richieste o risposte di streaming.
Supporto degli strumenti C# per i file .proto
gRPC usa un approccio con priorità al contratto ("contract-first") per lo sviluppo di API. I servizi e i messaggi sono definiti nei file .proto
:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
I tipi .NET per servizi, client e messaggi vengono generati automaticamente includendo i file .proto
in un progetto:
- Aggiungere un riferimento al pacchetto Grpc.Tools.
- Aggiungere i file
.proto
al gruppo di elementi<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Per altre informazioni sul supporto degli strumenti gRPC, vedere Servizi gRPC con C#.
Servizi gRPC in ASP.NET Core
I servizi gRPC possono essere ospitati in ASP.NET Core. I servizi offrono l'integrazione completa con funzionalità di ASP.NET Core, ad esempio la registrazione, l'inserimento delle dipendenze, l'autenticazione e l'autorizzazione.
Aggiungere servizi gRPC a un'app ASP.NET Core
gRPC richiede il pacchetto Grpc.AspNetCore. Per informazioni sulla configurazione di gRPC in un'app .NET, vedere Configurare gRPC.
Modello di progetto del servizio gRPC
Il modello di progetto del servizio gRPC ASP.NET Core fornisce un servizio di avvio:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
eredita dal tipo GreeterBase
, generato dal servizio Greeter
nel file .proto
. Il servizio è reso accessibile ai client in Program.cs
:
app.MapGrpcService<GreeterService>();
Per altre informazioni sui servizi gRPC in ASP.NET Core, vedere Servizi gRPC con ASP.NET Core.
Chiamare servizi gRPC con un client .NET
I client gRPC sono tipi client concreti generati da file .proto
. Il client gRPC concreto include metodi che si traducono nel servizio gRPC nel file .proto
.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
Un client gRPC viene creato usando un canale, che rappresenta una connessione di lunga durata a un servizio gRPC. È possibile creare un canale usando GrpcChannel.ForAddress
.
Per altre informazioni sulla creazione di client e sulla chiamata di diversi metodi di servizio, vedere Chiamare i servizi gRPC con il client .NET.
Risorse aggiuntive
gRPC è un framework RPC indipendente dal linguaggio a elevate prestazioni.
I principali vantaggi di gRPC sono:
- Framework RPC leggero e moderno ad alte prestazioni.
- Sviluppo di API con priorità al contratto usando i buffer del protocollo per impostazione predefinita e implementazioni indipendenti dal linguaggio.
- Strumenti disponibili per molte linguaggi consentono di generare client e server fortemente tipizzati.
- Supporto per chiamate client, server e di streaming bidirezionale.
- Utilizzo di rete ridotto grazie alla serializzazione binaria Protobuf.
Questi vantaggi rendono gRPC ideale per:
- Microservizi leggeri in cui l'efficienza è fondamentale.
- Sistemi poliglotti che richiedono l'uso di più linguaggi per lo sviluppo.
- Servizi in tempo reale da punto a punto che devono gestire richieste o risposte di streaming.
Supporto degli strumenti C# per i file .proto
gRPC usa un approccio con priorità al contratto ("contract-first") per lo sviluppo di API. I servizi e i messaggi sono definiti nei file .proto
:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
I tipi .NET per servizi, client e messaggi vengono generati automaticamente includendo i file .proto
in un progetto:
- Aggiungere un riferimento al pacchetto Grpc.Tools.
- Aggiungere i file
.proto
al gruppo di elementi<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Per altre informazioni sul supporto degli strumenti gRPC, vedere Servizi gRPC con C#.
Servizi gRPC in ASP.NET Core
I servizi gRPC possono essere ospitati in ASP.NET Core. I servizi offrono l'integrazione completa con funzionalità di ASP.NET Core, ad esempio la registrazione, l'inserimento delle dipendenze, l'autenticazione e l'autorizzazione.
Aggiungere servizi gRPC a un'app ASP.NET Core
gRPC richiede il pacchetto Grpc.AspNetCore. Per informazioni sulla configurazione di gRPC in un'app .NET, vedere Configurare gRPC.
Modello di progetto del servizio gRPC
Il modello di progetto del servizio gRPC fornisce un servizio di avvio:
public class GreeterService : Greeter.GreeterBase
{
private readonly ILogger<GreeterService> _logger;
public GreeterService(ILogger<GreeterService> logger)
{
_logger = logger;
}
public override Task<HelloReply> SayHello(HelloRequest request,
ServerCallContext context)
{
_logger.LogInformation("Saying hello to {Name}", request.Name);
return Task.FromResult(new HelloReply
{
Message = "Hello " + request.Name
});
}
}
GreeterService
eredita dal tipo GreeterBase
, generato dal servizio Greeter
nel file .proto
. Il servizio è reso accessibile ai client in Startup.cs
:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
Per altre informazioni sui servizi gRPC in ASP.NET Core, vedere Servizi gRPC con ASP.NET Core.
Chiamare servizi gRPC con un client .NET
I client gRPC sono tipi client concreti generati da file .proto
. Il client gRPC concreto include metodi che si traducono nel servizio gRPC nel file .proto
.
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(
new HelloRequest { Name = "World" });
Console.WriteLine(response.Message);
Un client gRPC viene creato usando un canale, che rappresenta una connessione di lunga durata a un servizio gRPC. È possibile creare un canale usando GrpcChannel.ForAddress
.
Per altre informazioni sulla creazione di client e sulla chiamata di diversi metodi di servizio, vedere Chiamare i servizi gRPC con il client .NET.