Introducción a gRPC en .NET
Nota:
Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión .NET 8 de este artículo.
Advertencia
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulte la versión .NET 8 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulte la versión .NET 8 de este artículo.
gRPC es un marco de llamada a procedimiento remoto (RPC) de alto rendimiento e independiente del idioma.
Las principales ventajas de gRPC son:
- Marco de RPC moderno, ligero y de alto rendimiento.
- Desarrollo de la API de primer contrato utilizando búferes de protocolo de forma predeterminada, lo que permite realizar implementaciones independientes del idioma.
- Dispone de herramientas para muchos idioma con la finalidad de generar clientes y servidores fuertemente tipados.
- Admite llamadas de transmisión en secuencias bidireccionales, de servidor y de cliente.
- Uso reducido de red con serialización binaria Protobuf.
Estas ventajas hacen que gRPC sea ideal para:
- Microservicios ligeros en los que la eficiencia sea fundamental.
- Sistemas políglotas en los que se requieran varios idiomas para el desarrollo.
- Servicios en tiempo real de punto a punto que necesitan controlar respuestas o solicitudes de transmisión en secuencias.
Compatibilidad de las herramientas de C# con archivos .proto
gRPC usa un enfoque de contrato primero para el desarrollo de API. Los servicios y mensajes se definen en los archivos .proto
:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Los tipos .NET para los servicios, los clientes y los mensajes se generan automáticamente incluyendo archivos .proto
en un proyecto:
- Agregue una referencia de paquete al paquete Grpc.Tools.
- Agregue archivos
.proto
al grupo de elementos<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Para más información sobre la compatibilidad con las herramientas de gRPC, vea Servicios gRPC con C#.
Servicios gRPC en ASP.NET Core
Los servicios gRPC se puede hospedar en ASP.NET Core. Los servicios tienen una integración completa con características de ASP.NET Core como el registro, la inserción de dependencias (DI), la autenticación y la autorización.
Incorporación de servicios gRPC a una aplicación de ASP.NET Core
gRPC requiere el paquete Grpc.AspNetCore. Para obtener información sobre cómo configurar gRPC en una aplicación .NET, consulte Configuración de gRPC.
Plantilla de proyecto de servicios gRPC
La plantilla de proyecto ASP.NET Core gRPC Service proporciona un servicio de inicio:
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
se hereda del tipo GreeterBase
, que se genera a partir del servicio Greeter
en el archivo .proto
. El servicio se hace accesible a los clientes en Program.cs
:
app.MapGrpcService<GreeterService>();
Para más información sobre los servicios gRPC en ASP.NET Core, consulte Servicios gRPC con ASP.NET Core.
Llamada a servicios gRPC con un cliente .NET
Los clientes gRPC son tipos de cliente concretos que se generan a partir de archivos .proto
. El cliente gRPC concreto tiene métodos que se convierten en el servicio gRPC en el archivo .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);
Un cliente gRPC se crea mediante un canal, que representa una conexión de larga duración con un servicio gRPC. Un canal se puede crear mediante GrpcChannel.ForAddress
.
Para más información sobre cómo crear clientes y llamar a métodos de servicio diferentes, vea Llamada a servicios gRPC con el cliente .NET.
Recursos adicionales
gRPC es un marco de llamada a procedimiento remoto (RPC) de alto rendimiento e independiente del idioma.
Las principales ventajas de gRPC son:
- Marco de RPC moderno, ligero y de alto rendimiento.
- Desarrollo de la API de primer contrato utilizando búferes de protocolo de forma predeterminada, lo que permite realizar implementaciones independientes del idioma.
- Dispone de herramientas para muchos idioma con la finalidad de generar clientes y servidores fuertemente tipados.
- Admite llamadas de transmisión en secuencias bidireccionales, de servidor y de cliente.
- Uso reducido de red con serialización binaria Protobuf.
Estas ventajas hacen que gRPC sea ideal para:
- Microservicios ligeros en los que la eficiencia sea fundamental.
- Sistemas políglotas en los que se requieran varios idiomas para el desarrollo.
- Servicios en tiempo real de punto a punto que necesitan controlar respuestas o solicitudes de transmisión en secuencias.
Compatibilidad de las herramientas de C# con archivos .proto
gRPC usa un enfoque de contrato primero para el desarrollo de API. Los servicios y mensajes se definen en los archivos .proto
:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Los tipos .NET para los servicios, los clientes y los mensajes se generan automáticamente incluyendo archivos .proto
en un proyecto:
- Agregue una referencia de paquete al paquete Grpc.Tools.
- Agregue archivos
.proto
al grupo de elementos<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Para más información sobre la compatibilidad con las herramientas de gRPC, vea Servicios gRPC con C#.
Servicios gRPC en ASP.NET Core
Los servicios gRPC se puede hospedar en ASP.NET Core. Los servicios tienen una integración completa con características de ASP.NET Core como el registro, la inserción de dependencias (DI), la autenticación y la autorización.
Incorporación de servicios gRPC a una aplicación de ASP.NET Core
gRPC requiere el paquete Grpc.AspNetCore. Para obtener información sobre cómo configurar gRPC en una aplicación .NET, consulte Configuración de gRPC.
Plantilla de proyecto de servicios gRPC
La plantilla de proyecto de servicios gRPC proporciona un servicio de inicio:
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
se hereda del tipo GreeterBase
, que se genera a partir del servicio Greeter
en el archivo .proto
. El servicio se hace accesible a los clientes en Startup.cs
:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
Para más información sobre los servicios gRPC en ASP.NET Core, consulte Servicios gRPC con ASP.NET Core.
Llamada a servicios gRPC con un cliente .NET
Los clientes gRPC son tipos de cliente concretos que se generan a partir de archivos .proto
. El cliente gRPC concreto tiene métodos que se convierten en el servicio gRPC en el archivo .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);
Un cliente gRPC se crea mediante un canal, que representa una conexión de larga duración con un servicio gRPC. Un canal se puede crear mediante GrpcChannel.ForAddress
.
Para más información sobre cómo crear clientes y llamar a métodos de servicio diferentes, vea Llamada a servicios gRPC con el cliente .NET.