gRPC pour C# (.NET) : bibliothèques et exemples d'utilisation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

gRPC pour C# (.NET) : bibliothèques et exemples

\n\n

gRPC est un framework d'appel de procédure à distance (RPC) haute performance de Google, basé sur HTTP/2 et Protocol Buffers (protobuf). Dans l'écosystème .NET, gRPC est devenu le standard de facto pour la communication entre microservices, offrant un typage strict, un flux bidirectionnel et une faible latence. Dans cet article, nous examinerons les bibliothèques clés pour travailler avec gRPC en C# et fournirons des exemples pratiques de configuration d'un serveur et d'un client.

\n\n

Bibliothèques principales gRPC pour .NET

\n\n

Pour travailler avec gRPC dans .NET, les packages NuGet suivants sont utilisés :

\n\n
    \n
  • Grpc.AspNetCore — intégration du serveur gRPC dans ASP.NET Core (recommandé pour l'hébergement).
  • \n
  • Grpc.Net.Client — bibliothèque cliente pour .NET (incluant .NET Core, .NET 5+).
  • \n
  • Grpc.Tools — générateur de code à partir de fichiers .proto (ajouté comme élément Protobuf dans .csproj).
  • \n
  • Google.Protobuf — gestion des messages protobuf.
  • \n
\n\n

Tous ces packages sont pris en charge par Microsoft et sont activement développés. L'installation se fait via le gestionnaire de packages NuGet ou l'interface en ligne de commande dotnet :

\n\n
dotnet add package Grpc.AspNetCore\ndotnet add package Grpc.Net.Client\ndotnet add package Google.Protobuf\ndotnet add package Grpc.Tools
\n\n

Création d'un serveur gRPC en C#

\n\n

Examinons la création étape par étape d'un service simple pour la gestion des commandes.

\n\n

1. Définition du fichier proto

\n

Créez un fichier order.proto dans le projet serveur (par exemple, GrpcServer) :

\n\n
syntax = "proto3";\n\nservice OrderService {\n    rpc GetOrder (OrderRequest) returns (OrderResponse);\n    rpc SubscribeOrders (OrderRequest) returns (stream OrderResponse);\n}\n\nmessage OrderRequest {\n    int32 order_id = 1;\n}\n\nmessage OrderResponse {\n    int32 order_id = 1;\n    string status = 2;\n    double total = 3;\n}
\n\n

2. Configuration du .csproj pour la génération de code

\n

Ajoutez dans le fichier .csproj :

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

3. Implémentation du service

\n

Créez une classe héritant de la classe de base générée :

\n\n
public class OrderServiceImpl : OrderService.OrderServiceBase\n{\n    public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context)\n    {\n        return Task.FromResult(new OrderResponse\n        {\n            OrderId = request.OrderId,\n            Status = "Shipped",\n            Total = 99.99\n        });\n    }\n\n    public override async Task SubscribeOrders(OrderRequest request, \n        IServerStreamWriter<OrderResponse> responseStream, ServerCallContext context)\n    {\n        for (int i = 0; i < 5; i++)\n        {\n            await responseStream.WriteAsync(new OrderResponse\n            {\n                OrderId = request.OrderId,\n                Status = $"Update #{i}",\n                Total = 100 + i * 10\n            });\n            await Task.Delay(1000);\n        }\n    }\n}
\n\n

4. Enregistrement dans Program.cs

\n\n
var builder = WebApplication.CreateBuilder(args);\nbuilder.Services.AddGrpc();\n\nvar app = builder.Build();\napp.MapGrpcService<OrderServiceImpl>();\napp.MapGet("/", () => "gRPC server is running");\napp.Run();
\n\n

Création d'un client gRPC en C#

\n\n

Créons maintenant une application console cliente (GrpcClient).

\n\n

1. Préparation

\n

Copiez le fichier order.proto dans le projet client et spécifiez dans .csproj :

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

2. Code du client

\n\n
using Grpc.Net.Client;\nusing GrpcClient;\n\nvar channel = GrpcChannel.ForAddress("https://localhost:5001");\                    

Recommendations