Partilhar via


Visão geral do gRPC no .NET

Note

Esta não é a versão mais recente deste artigo. Para a versão atual, consulte a versão .NET 10 deste artigo.

Warning

Esta versão do ASP.NET Core não é mais suportada. Para obter mais informações, consulte a Política de suporte do .NET e do .NET Core. Para a versão atual, consulte a versão .NET 10 deste artigo.

Por James Newton-King

gRPC é uma estrutura de alto desempenho para Chamada de Procedimento Remoto (RPC) que é independente de linguagem.

Os principais benefícios do gRPC são:

  • Estrutura RPC moderna, leve e de alto desempenho.
  • Desenvolvimento de API contract-first, utilizando, por padrão, Protocol Buffers, permitindo implementações agnósticas de linguagem.
  • Conjunto de ferramentas disponível para várias linguagens de programação, capaz de gerar servidores e clientes de tipagem forte.
  • Suporta chamadas de streaming cliente, servidor e bidirecional.
  • Redução do uso da rede com a serialização binária Protobuf.

Esses benefícios tornam o gRPC ideal para:

  • Microsserviços leves onde a eficiência é crítica.
  • Sistemas poliglotas onde são necessárias várias linguagens para o desenvolvimento.
  • Serviços ponto a ponto em tempo real que precisam lidar com solicitações ou respostas de streaming.

Suporte a ferramentas C# para .proto arquivos

O gRPC usa uma abordagem de contrato em primeiro lugar para o desenvolvimento de API. Serviços e mensagens são definidos em .proto arquivos:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Os tipos .NET para serviços, clientes e mensagens são gerados automaticamente pela inclusão .proto de arquivos em um projeto:

  • Adicione uma referência de pacote ao pacote Grpc.Tools .
  • Adicione .proto arquivos ao grupo de <Protobuf> itens.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Para obter mais informações sobre o suporte a ferramentas gRPC, consulte Serviços gRPC com C#.

Serviços gRPC no ASP.NET Core

Os serviços gRPC podem ser hospedados no ASP.NET Core. Os serviços têm integração total com ASP.NET recursos principais, como registro, injeção de dependência (DI), autenticação e autorização.

Adicionar serviços gRPC a um aplicativo ASP.NET Core

gRPC requer o Grpc.AspNetCore pacote. Para obter informações sobre como configurar o gRPC em um aplicativo .NET, consulte Configurar o gRPC.

O modelo de projeto de serviço gRPC

O modelo de projeto ASP.NET Core gRPC Service fornece um serviço inicial:

public class GreeterService(ILogger<GreeterService> logger) : Greeter.GreeterBase
{
    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
        });
    }
}
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 herda do tipo GreeterBase, que é gerado a partir do serviço Greeter no ficheiro .proto. O serviço é disponibilizado aos clientes em Program.cs:

app.MapGrpcService<GreeterService>();

Para saber mais sobre os serviços gRPC no ASP.NET Core, consulte Serviços gRPC com ASP.NET Core.

Chamar serviços gRPC com um cliente .NET

Os clientes gRPC são tipos de clientes concretos que são gerados a partir de arquivos .proto. O cliente gRPC concreto tem métodos que correspondem ao serviço gRPC no arquivo .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);

Um cliente gRPC é criado usando um canal, que representa uma conexão de longa duração com um serviço gRPC. Um canal pode ser criado usando GrpcChannel.ForAddress.

Para obter mais informações sobre como criar clientes e chamar métodos de serviço diferentes, consulte Chamar serviços gRPC com o cliente .NET.

Recursos adicionais

gRPC é uma estrutura de alto desempenho para Chamada de Procedimento Remoto (RPC) que é independente de linguagem.

Os principais benefícios do gRPC são:

  • Estrutura RPC moderna, leve e de alto desempenho.
  • Desenvolvimento de API contract-first, utilizando, por padrão, Protocol Buffers, permitindo implementações agnósticas de linguagem.
  • Conjunto de ferramentas disponível para várias linguagens de programação, capaz de gerar servidores e clientes de tipagem forte.
  • Suporta chamadas de streaming cliente, servidor e bidirecional.
  • Redução do uso da rede com a serialização binária Protobuf.

Esses benefícios tornam o gRPC ideal para:

  • Microsserviços leves onde a eficiência é crítica.
  • Sistemas poliglotas onde são necessárias várias linguagens para o desenvolvimento.
  • Serviços ponto a ponto em tempo real que precisam lidar com solicitações ou respostas de streaming.

Suporte a ferramentas C# para .proto arquivos

O gRPC usa uma abordagem de contrato em primeiro lugar para o desenvolvimento de API. Serviços e mensagens são definidos em .proto arquivos:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Os tipos .NET para serviços, clientes e mensagens são gerados automaticamente pela inclusão .proto de arquivos em um projeto:

  • Adicione uma referência de pacote ao pacote Grpc.Tools .
  • Adicione .proto arquivos ao grupo de <Protobuf> itens.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Para obter mais informações sobre o suporte a ferramentas gRPC, consulte Serviços gRPC com C#.

Serviços gRPC no ASP.NET Core

Os serviços gRPC podem ser hospedados no ASP.NET Core. Os serviços têm integração total com ASP.NET recursos principais, como registro, injeção de dependência (DI), autenticação e autorização.

Adicionar serviços gRPC a um aplicativo ASP.NET Core

gRPC requer o Grpc.AspNetCore pacote. Para obter informações sobre como configurar o gRPC em um aplicativo .NET, consulte Configurar o gRPC.

O modelo de projeto de serviço gRPC

O modelo de projeto de serviço gRPC fornece um serviço inicial:

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 herda do tipo GreeterBase, que é gerado a partir do serviço Greeter no ficheiro .proto. O serviço é disponibilizado aos clientes em Startup.cs:

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

Para saber mais sobre os serviços gRPC no ASP.NET Core, consulte Serviços gRPC com ASP.NET Core.

Chamar serviços gRPC com um cliente .NET

Os clientes gRPC são tipos de clientes concretos que são gerados a partir de arquivos .proto. O cliente gRPC concreto tem métodos que correspondem ao serviço gRPC no arquivo .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);

Um cliente gRPC é criado usando um canal, que representa uma conexão de longa duração com um serviço gRPC. Um canal pode ser criado usando GrpcChannel.ForAddress.

Para obter mais informações sobre como criar clientes e chamar métodos de serviço diferentes, consulte Chamar serviços gRPC com o cliente .NET.

Recursos adicionais