Panoramica per gRPC in .NET

Di James Newton-King

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.

Risorse aggiuntive