Panoramica per gRPC in .NET
gRPC è un framework rpc (Remote Procedure Call) a livello di linguaggio agnostico e ad alte 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.
Avviso
ASP.NET Core gRPC ha requisiti aggiuntivi per l'uso con il servizio app di Azure o IIS. Per altre informazioni sulla posizione in cui è possibile usare gRPC, vedere gRPC in piattaforme supportate da .NET.
Supporto degli strumenti C# per .proto
i file
gRPC usa un approccio di primo contratto per lo sviluppo di API. I servizi e i messaggi sono definiti nei .proto
file:
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 .proto
i file in un progetto:
- Aggiungere un riferimento al pacchetto Grpc.Tools .
- Aggiungere
.proto
file al<Protobuf>
gruppo di elementi.
<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 dispongono di integrazione completa con funzionalità di base ASP.NET, ad esempio la registrazione, l'inserimento delle dipendenze (DI), 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 core ASP.NET 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 GreeterBase
tipo, generato dal Greeter
servizio nel .proto
file. 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 i servizi gRPC con un client .NET
I client gRPC sono tipi client concreti generati da .proto
file. Il client gRPC concreto include metodi che si traducono nel servizio gRPC nel .proto
file.
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);
Viene creato un client gRPC 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 (Remote Procedure Call) a livello di linguaggio agnostico e ad alte 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.
Avviso
ASP.NET Core gRPC ha requisiti aggiuntivi per l'uso con il servizio app di Azure o IIS. Per altre informazioni sulla posizione in cui è possibile usare gRPC, vedere gRPC in piattaforme supportate da .NET.
Supporto degli strumenti C# per .proto
i file
gRPC usa un approccio di primo contratto per lo sviluppo di API. I servizi e i messaggi sono definiti nei .proto
file:
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 .proto
i file in un progetto:
- Aggiungere un riferimento al pacchetto Grpc.Tools .
- Aggiungere
.proto
file al<Protobuf>
gruppo di elementi.
<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 dispongono di integrazione completa con funzionalità di base ASP.NET, ad esempio la registrazione, l'inserimento delle dipendenze (DI), 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 offre 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 GreeterBase
tipo, generato dal Greeter
servizio nel .proto
file. 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 i servizi gRPC con un client .NET
I client gRPC sono tipi client concreti generati da .proto
file. Il client gRPC concreto include metodi che si traducono nel servizio gRPC nel .proto
file.
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);
Viene creato un client gRPC 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.