gRPC para C# (.NET): bibliotecas y ejemplos de uso

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

gRPC para C# (.NET): bibliotecas y ejemplos



gRPC es un framework de alto rendimiento para llamadas a procedimientos remotos (RPC) de Google, basado en HTTP/2 y Protocol Buffers (protobuf). En el ecosistema .NET, gRPC se ha convertido en el estándar de facto para la comunicación entre microservicios, proporcionando tipado estricto, transmisión bidireccional y baja latencia. En este artículo, revisaremos las bibliotecas clave para trabajar con gRPC en C# y presentaremos ejemplos prácticos de configuración del servidor y el cliente.



Bibliotecas principales de gRPC para .NET



Para trabajar con gRPC en .NET se utilizan los siguientes paquetes de NuGet:



  • Grpc.AspNetCore — integración del servidor gRPC en ASP.NET Core (recomendado para alojamiento).
  • Grpc.Net.Client — biblioteca cliente para .NET (incluye .NET Core, .NET 5+).
  • Grpc.Tools — generador de código a partir de archivos .proto (se agrega como elemento Protobuf en .csproj).
  • Google.Protobuf — manejo de mensajes protobuf.


Todos estos paquetes son compatibles con Microsoft y están en desarrollo activo. La instalación se realiza a través del Administrador de paquetes NuGet o la CLI de dotnet:



dotnet add package Grpc.AspNetCoredotnet add package Grpc.Net.Clientdotnet add package Google.Protobufdotnet add package Grpc.Tools


Creación de un servidor gRPC en C#



Veamos la creación paso a paso de un servicio simple para gestionar pedidos.



1. Definición del archivo proto

Cree un archivo order.proto en el proyecto del servidor (por ejemplo, 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. Configuración de .csproj para generación de código

Agregue al archivo .csproj:



<ItemGroup>    <Protobuf Include="order.proto" GrpcServices="Server" /></ItemGroup>


3. Implementación del servicio

Cree una clase que herede de la clase base generada:



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 en 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();


Creación de un cliente gRPC en C#



Ahora crearemos una aplicación de consola cliente (GrpcClient).



1. Preparación

Copie el archivo order.proto en el proyecto del cliente e indíquelo en .csproj:



<Protobuf Include="order.proto" GrpcServices="Client" />


2. Código del cliente



using Grpc.Net.Client;using GrpcClient;

var channel = GrpcChannel.ForAddress("https://localhost:5001");\

Recommendations