Vue d’ensemble de gRPC sur .NET

Par James Newton-King

gRPC est un Framework d’appel de procédure distante (RPC) indépendant du langage et de haute performance.

Les principaux avantages de gRPC sont :

  • Framework RPC léger, moderne et à haut niveau de performance.
  • Développement d’API « Contract-first », à l’aide de mémoires tampons de protocole par défaut, permettant des implémentations indépendantes du langage.
  • Outils disponibles pour de nombreux langages afin de générer des clients et serveurs fortement typés.
  • Prise en charge d’appels de streaming client, serveur et bidirectionnels.
  • Utilisation réduite du réseau avec sérialisation binaire Protobuf.

Ces avantages font de gRPC la solution idéale pour :

  • Les microservices légers où l’efficacité est essentielle.
  • Les systèmes polyglottes où plusieurs langages sont nécessaires au développement.
  • Les services en temps réel de point à point qui doivent gérer des demandes ou réponses de streaming.

Prise en charge des outils C# pour les fichiers .proto

gRPC utilise une approche de type « Contrat en premier » pour le développement d’API. Les services et les messages sont définis dans des fichiers .proto :

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Les types .NET des services, des clients et des messages sont générés automatiquement via l’inclusion de fichiers .proto dans un projet :

  • Ajoutez une référence de package au package Grpc.Tools.
  • Ajoutez les fichiers .proto au groupe d’éléments <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Pour plus d’informations sur la prise en charge des outils gRPC, consultez Services gRPC avec C#.

Services gRPC sur ASP.NET Core

Les services gRPC peuvent être hébergés sur ASP.NET Core. Les services s’intègrent de manière complète aux fonctionnalités d’ASP.NET Core, par exemple la journalisation, l’injection de dépendances, l’authentification et l’autorisation.

Ajouter des services gRPC à une application ASP.NET Core

gRPC nécessite le package Grpc.AspNetCore. Pour plus d’informations sur la configuration de gRPC dans une application .NET, consultez Configurer gRPC.

Modèle de projet de service gRPC

Le modèle de projet Service gRPC ASP.NET Core fournit un service de démarrage :

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 hérite du type GreeterBase, qui est généré à partir du service Greeter dans le fichier .proto. Le service est rendu accessible aux clients dans Program.cs :

app.MapGrpcService<GreeterService>();

Pour en savoir plus sur les services gRPC sur ASP.NET Core, consultez Services gRPC avec ASP.NET Core.

Appeler les services gRPC avec un client .NET

Les clients gRPC sont des types de client concrets générés à partir de fichiers .proto. Le client gRPC concret a des méthodes qui sont traduites pour le service gRPC dans le fichier .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 client gRPC est créé à l’aide d’un canal, qui représente une connexion de longue durée à un service gRPC. Vous pouvez créer un canal à l’aide de GrpcChannel.ForAddress.

Pour plus d’informations sur la création de clients et l’appel de différentes méthodes de service, consultez Appeler les services gRPC avec le client .NET.

Ressources supplémentaires

gRPC est un Framework d’appel de procédure distante (RPC) indépendant du langage et de haute performance.

Les principaux avantages de gRPC sont :

  • Framework RPC léger, moderne et à haut niveau de performance.
  • Développement d’API « Contract-first », à l’aide de mémoires tampons de protocole par défaut, permettant des implémentations indépendantes du langage.
  • Outils disponibles pour de nombreux langages afin de générer des clients et serveurs fortement typés.
  • Prise en charge d’appels de streaming client, serveur et bidirectionnels.
  • Utilisation réduite du réseau avec sérialisation binaire Protobuf.

Ces avantages font de gRPC la solution idéale pour :

  • Les microservices légers où l’efficacité est essentielle.
  • Les systèmes polyglottes où plusieurs langages sont nécessaires au développement.
  • Les services en temps réel de point à point qui doivent gérer des demandes ou réponses de streaming.

Prise en charge des outils C# pour les fichiers .proto

gRPC utilise une approche de type « Contrat en premier » pour le développement d’API. Les services et les messages sont définis dans des fichiers .proto :

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Les types .NET des services, des clients et des messages sont générés automatiquement via l’inclusion de fichiers .proto dans un projet :

  • Ajoutez une référence de package au package Grpc.Tools.
  • Ajoutez les fichiers .proto au groupe d’éléments <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

Pour plus d’informations sur la prise en charge des outils gRPC, consultez Services gRPC avec C#.

Services gRPC sur ASP.NET Core

Les services gRPC peuvent être hébergés sur ASP.NET Core. Les services s’intègrent de manière complète aux fonctionnalités d’ASP.NET Core, par exemple la journalisation, l’injection de dépendances, l’authentification et l’autorisation.

Ajouter des services gRPC à une application ASP.NET Core

gRPC nécessite le package Grpc.AspNetCore. Pour plus d’informations sur la configuration de gRPC dans une application .NET, consultez Configurer gRPC.

Modèle de projet de service gRPC

Le modèle de projet de service gRPC fournit un service de démarrage :

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 hérite du type GreeterBase, qui est généré à partir du service Greeter dans le fichier .proto. Le service est rendu accessible aux clients dans Startup.cs :

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

Pour en savoir plus sur les services gRPC sur ASP.NET Core, consultez Services gRPC avec ASP.NET Core.

Appeler les services gRPC avec un client .NET

Les clients gRPC sont des types de client concrets générés à partir de fichiers .proto. Le client gRPC concret a des méthodes qui sont traduites pour le service gRPC dans le fichier .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 client gRPC est créé à l’aide d’un canal, qui représente une connexion de longue durée à un service gRPC. Vous pouvez créer un canal à l’aide de GrpcChannel.ForAddress.

Pour plus d’informations sur la création de clients et l’appel de différentes méthodes de service, consultez Appeler les services gRPC avec le client .NET.

Ressources supplémentaires