gRPC para C# (.NET): bibliotecas e exemplos
gRPC é um framework de chamada remota de procedimentos (RPC) de alto desempenho do Google, baseado em HTTP/2 e Protocol Buffers (protobuf). No ecossistema .NET, o gRPC tornou-se o padrão de facto para comunicação entre microsserviços, oferecendo tipagem forte, transmissão bidirecional em fluxo e baixa latência. Neste artigo, abordaremos as principais bibliotecas para trabalhar com gRPC em C# e forneceremos exemplos práticos de configuração de servidor e cliente.
Principais bibliotecas gRPC para .NET
Para trabalhar com gRPC no .NET, são utilizados os seguintes pacotes do NuGet:
- Grpc.AspNetCore — integração do servidor gRPC no ASP.NET Core (recomendado para hospedagem).
- Grpc.Net.Client — biblioteca cliente para .NET (incluindo .NET Core, .NET 5+).
- Grpc.Tools — gerador de código a partir de arquivos
.proto(adicionado como itemProtobufno .csproj). - Google.Protobuf — manipulação de mensagens protobuf.
Todos esses pacotes são mantidos pela Microsoft e estão em desenvolvimento ativo. A instalação é feita via NuGet Package Manager ou dotnet CLI:
dotnet add package Grpc.AspNetCoredotnet add package Grpc.Net.Clientdotnet add package Google.Protobufdotnet add package Grpc.ToolsCriação de um servidor gRPC em C#
Vamos criar passo a passo um serviço simples para gerenciamento de pedidos.
1. Definição do arquivo proto
Crie o arquivo order.proto no projeto do servidor (exemplo: GrpcServer):
syntax = "proto3";
service OrderService { rpc GetOrder (OrderRequest) returns (OrderResponse); rpc SubscribeOrders (OrderRequest) returns (stream OrderResponse);}
message OrderRequest { int32 order_id = 1;}
message OrderResponse { int32 order_id = 1; string status = 2; double total = 3;}2. Configuração do .csproj para geração de código
Adicione ao arquivo .csproj:
<ItemGroup> <Protobuf Include="order.proto" GrpcServices="Server" /></ItemGroup>3. Implementação do serviço
Crie uma classe que herda da classe base gerada:
public class OrderServiceImpl : OrderService.OrderServiceBase{ public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context) { return Task.FromResult(new OrderResponse { OrderId = request.OrderId, Status = "Shipped", Total = 99.99 }); }
public override async Task SubscribeOrders(OrderRequest request, IServerStreamWriter<OrderResponse> responseStream, ServerCallContext context) { for (int i = 0; i < 5; i++) { await responseStream.WriteAsync(new OrderResponse { OrderId = request.OrderId, Status = $"Update #{i}", Total = 100 + i * 10 }); await Task.Delay(1000); } }}4. Registro no Program.cs
var builder = WebApplication.CreateBuilder(args);builder.Services.AddGrpc();
var app = builder.Build();app.MapGrpcService<OrderServiceImpl>();app.MapGet("/", () => "gRPC server is running");app.Run();Criação de um cliente gRPC em C#
Agora vamos criar um aplicativo de console cliente (GrpcClient).
1. Preparação
Copie o arquivo order.proto para o projeto cliente e especifique no .csproj:
<Protobuf Include="order.proto" GrpcServices="Client" />2. Código do cliente
using Grpc.Net.Client;using GrpcClient;
var channel = GrpcChannel.ForAddress("https://localhost:5001");\ Também na biblioteca
Paging 3 para Kotlin: guia completo com exemplos práticos
Aprendizado de Máquina em C#: bibliotecas ML.NET e Accord.NET
Trabalhando com Apache Kafka em C++: biblioteca librdkafka e exemplos práticos
Resilience4j para Java: guia completo com exemplos