Visão geral do gRPC no .NET
Observação
Esta não é a versão mais recente deste artigo. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Aviso
Esta versão do ASP.NET Core não tem mais suporte. Para obter mais informações, confira .NET e a Política de Suporte do .NET Core. Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
Importante
Essas informações relacionam-se ao produto de pré-lançamento, que poderá ser substancialmente modificado antes do lançamento comercial. A Microsoft não oferece nenhuma garantia, explícita ou implícita, quanto às informações fornecidas aqui.
Para informações sobre a versão vigente, confira a Versão do .NET 8 deste artigo.
O gRPC é uma estrutura de RPC (Chamada de Procedimento Remoto) de linguagem independente de alto desempenho.
Os principais benefícios de gRPC são:
- Estrutura de RPC leve, moderna e de alto desempenho.
- Desenvolvimento da API de primeiro contrato, usando buffers de protocolo, por padrão, permitindo implementações independente de linguagem.
- As ferramentas disponíveis para várias linguagens gerarem clientes e servidores fortemente tipados.
- Dá suporte ao cliente, servidor e chamadas bi-direcionais de streaming.
- Uso de rede reduzida com a serialização binária Protobuf.
Esses benefícios tornam o gRPC ideal para:
- Microsserviços leves em que a eficiência é crítica.
- Sistemas poliglotas nos quais múltiplas linguagens são necessárias para o desenvolvimento.
- Serviços ponto a ponto em tempo real que precisam lidar com solicitações ou respostas de streaming.
Suporte para ferramentas de C# para arquivos .proto
O gRPC usa uma abordagem de contrato primeiro para o desenvolvimento de API. Serviços e mensagens são definidos em arquivos .proto
:
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, incluindo arquivos .proto
em um projeto:
- Adicione uma referência de pacote ao pacote Grpc.Tools.
- Adicione arquivos
.proto
ao grupo de itens<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Para obter mais informações sobre o suporte para ferramentas gRPC, consulte Serviços do gRPC com C#.
Serviços do gRPC com o ASP.NET Core
Os serviços gRPC podem ser hospedados no ASP.NET Core. Os serviços têm integração completa com recursos do ASP.NET Core como registro em log, DI (injeção de dependência), autenticação e autorização.
Adicionar serviços gRPC a um aplicativo ASP.NET Core
O gRPC requer o pacote Grpc.AspNetCore. Para obter informações sobre como configurar o gRPC em um aplicativo .NET, consulte Configurar o gRPC.
O modelo de projeto do serviço gRPC
O modelo de projeto do Serviço gRPC do ASP.NET Core 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 do serviço Greeter
no arquivo .proto
. O serviço é acessível 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 o ASP.NET Core.
Chamar os serviços do gRPC com um cliente .NET
Os clientes gRPC são tipos de cliente concretos gerados a partir de arquivos .proto
. O cliente gRPC concreto tem métodos que se traduzem para o 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 diferentes métodos de serviço, consulte Chamar serviços gRPC com o cliente .NET.
Recursos adicionais
O gRPC é uma estrutura de RPC (Chamada de Procedimento Remoto) de linguagem independente de alto desempenho.
Os principais benefícios de gRPC são:
- Estrutura de RPC leve, moderna e de alto desempenho.
- Desenvolvimento da API de primeiro contrato, usando buffers de protocolo, por padrão, permitindo implementações independente de linguagem.
- As ferramentas disponíveis para várias linguagens gerarem clientes e servidores fortemente tipados.
- Dá suporte ao cliente, servidor e chamadas bi-direcionais de streaming.
- Uso de rede reduzida com a serialização binária Protobuf.
Esses benefícios tornam o gRPC ideal para:
- Microsserviços leves em que a eficiência é crítica.
- Sistemas poliglotas nos quais múltiplas linguagens são necessárias para o desenvolvimento.
- Serviços ponto a ponto em tempo real que precisam lidar com solicitações ou respostas de streaming.
Suporte para ferramentas de C# para arquivos .proto
O gRPC usa uma abordagem de contrato primeiro para o desenvolvimento de API. Serviços e mensagens são definidos em arquivos .proto
:
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, incluindo arquivos .proto
em um projeto:
- Adicione uma referência de pacote ao pacote Grpc.Tools.
- Adicione arquivos
.proto
ao grupo de itens<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Para obter mais informações sobre o suporte para ferramentas gRPC, consulte Serviços do gRPC com C#.
Serviços do gRPC com o ASP.NET Core
Os serviços gRPC podem ser hospedados no ASP.NET Core. Os serviços têm integração completa com recursos do ASP.NET Core como registro em log, DI (injeção de dependência), autenticação e autorização.
Adicionar serviços gRPC a um aplicativo ASP.NET Core
O gRPC requer o pacote Grpc.AspNetCore. Para obter informações sobre como configurar o gRPC em um aplicativo .NET, consulte Configurar o gRPC.
O modelo de projeto do serviço gRPC
O modelo de projeto do 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 do serviço Greeter
no arquivo .proto
. O serviço é acessível 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 o ASP.NET Core.
Chamar os serviços do gRPC com um cliente .NET
Os clientes gRPC são tipos de cliente concretos gerados a partir de arquivos .proto
. O cliente gRPC concreto tem métodos que se traduzem para o 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 diferentes métodos de serviço, consulte Chamar serviços gRPC com o cliente .NET.