gRPC para C# (.NET): bibliotecas, configuración y ejemplos de código

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 moderno y de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google. Utiliza HTTP/2 para el transporte y Protocol Buffers (protobuf) para la serialización de datos. En el ecosistema .NET, gRPC se ha convertido en la herramienta principal para construir arquitecturas de microservicios, proporcionando tipado estricto, transmisión bidireccional por streaming y baja latencia. En este artículo, revisaremos las bibliotecas clave para trabajar con gRPC en C# y presentaremos ejemplos prácticos.



Bibliotecas principales para gRPC en .NET



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



  • Grpc.Net.Client — biblioteca cliente para crear clientes gRPC. Funciona sobre HttpClient y soporta todos los tipos de llamadas: unario, server streaming, client streaming y bidireccional.
  • Grpc.AspNetCore.Server — biblioteca servidor para integrar gRPC en ASP.NET Core. Permite alojar servicios gRPC junto con APIs REST convencionales.
  • Google.Protobuf — biblioteca para trabajar con Protocol Buffers, generación y deserialización de mensajes.
  • Grpc.Tools — conjunto de herramientas para la generación automática de código C# a partir de archivos .proto durante la compilación del proyecto.


El proceso de desarrollo incluye tres etapas: descripción del servicio en un archivo .proto, generación de código e implementación del servidor/cliente.



Ejemplo 1: Servicio unario simple (solicitud-respuesta)



Crearemos un servicio simple para obtener información de un usuario. Para ello, definimos el archivo user.proto:



syntax = "proto3";

package user;

service UserService { rpc GetUser (UserRequest) returns (UserResponse);}

message UserRequest { int32 id = 1;}

message UserResponse { string name = 1; string email = 2; int32 age = 3;}


Agregue al proyecto las referencias a los paquetes y al archivo .proto. Después de la compilación, se generarán las clases UserRequest, UserResponse y la clase base UserServiceBase.



Implementación del servidor



using Grpc.Core;using User;

public class UserServiceImpl : UserService.UserServiceBase{ public override Task<UserResponse> GetUser(UserRequest request, ServerCallContext context) { var user = new UserResponse { Name = "Iván Petrov", Email = "ivan@example.com", Age = 30 }; return Task.FromResult(user); }}


Inicio del servidor en ASP.NET Core:



var builder = WebApplication.CreateBuilder(args);builder.Services.AddGrpc();var app = builder.Build();app.MapGrpcService<UserServiceImpl>();app.Run();


Implementación del cliente



using Grpc.Net.Client;using User;

var channel = GrpcChannel.ForAddress("https://localhost:5001");var client = new UserService.UserServiceClient(channel);

var response = await client.GetUserAsync(new UserRequest { Id = 1 });Console.WriteLine($"Usuario: {response.Name}, Email: {response.Email}");


Ejemplo 2: Transmisión por streaming del servidor (Server Streaming)



La transmisión por streaming del servidor es útil cuando se necesita enviar múltiples datos al cliente, como una lista de eventos o registros. Ampliemos nuestro archivo .proto:



service UserService {  rpc GetUser (UserRequest) returns (UserResponse);  rpc ListUsers (Empty) returns (stream UserResponse);}

message Empty {}


Implementación del servidor:



public override async Task ListUsers(Empty request, IServerStreamWriter<UserResponse> responseStream, ServerCallContext context){    var users = new List<UserResponse>    {        new UserResponse { Name = "Ana", Email = "anna@test.com" },        new UserResponse { Name = "Borís", Email = "boris@test.com" }    };

Recommendations