Tutoriel : Créer un serveur et un client gRPC dans ASP.NET Core

Ce tutoriel montre comment créer un client gRPC .NET Core et un serveur gRPC ASP.NET Core. À la fin, vous disposerez d’un client gRPC qui communique avec le service Greeter gRPC.

Dans ce tutoriel, vous allez :

  • Créer un serveur gRPC.
  • Créez un client gRPC.
  • Testez le client gRPC avec le service Greeter gRPC.

Prérequis

Créer un service gRPC

  • Démarrez Visual Studio 2022 et sélectionnez Nouveau projet.
  • Dans la boîte de dialogue Créer un nouveau projet, recherchez gRPC. Sélectionnez Service ASP.NET Core gRPC, puis sélectionnez Suivant.
  • Dans la boîte de dialogue Configurer votre nouveau projet, entrez GrpcGreeter pour Nom du projet. Il est important de nommer le projet GrpcGreeter pour que les espaces de noms correspondent quand vous copiez et collez du code.
  • Cliquez sur Suivant.
  • Dans la fenêtre de dialogue Informations supplémentaires, sélectionnez .NET 8.0 (prise en charge à long terme), puis sélectionnez Créer.

Exécuter le service

  • Appuyez sur Ctrl+F5 pour exécuter sans le débogueur.

    Visual Studio affiche la boîte de dialogue suivante lorsqu’un projet n’est pas encore configuré pour utiliser SSL :

    Ce projet est configuré pour utiliser SSL. Pour éviter les avertissements SSL dans le navigateur, vous pouvez choisir d’approuver le certificat auto-signé généré par IIS Express. Voulez-vous approuver le certificat SSL d’IIS Express ?

    Sélectionnez Oui si vous faites confiance au certificat SSL d’IIS Express.

    La boîte de dialogue suivante s’affiche :

    Boîte de dialogue Avertissement de sécurité

    Sélectionnez Oui si vous acceptez d’approuver le certificat de développement.

    Pour plus d’informations sur l’approbation du navigateur Firefox, consultez Erreur de certificat Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio :

    • Démarre le serveur Kestrel.
    • Lance un navigateur.
    • Accède à http://localhost:port, par exemple http://localhost:7042.
      • port : numéro de port attribué de manière aléatoire pour l’application.
      • localhost : nom d’hôte standard de l’ordinateur local. Localhost traite uniquement les requêtes web de l’ordinateur local.

Les journaux affichent le service à l’écoute sur https://localhost:<port>, où <port> est le numéro de port localhost attribué de manière aléatoire lorsque le projet est créé et défini dans Properties/launchSettings.json.

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Remarque

Le modèle gRPC est configuré pour utiliser le protocole Transport Layer Security (TLS). Les clients gRPC doivent utiliser le protocole HTTPS pour appeler le serveur. Le numéro de port localhost du service gRPC est attribué de manière aléatoire lorsque le projet est créé et défini dans le fichier Properties\launchSettings.json du projet de service gRPC.

Examiner les fichiers projet

Fichiers projet GrpcGreeter :

  • Protos/greet.proto : définit le gRPC Greeter et est utilisé pour générer les ressources du serveur gRPC. Pour plus d’informations, consultez Introduction à gRPC.
  • Dossier Services : contient l’implémentation du service Greeter.
  • appSettings.json : contient des données de configuration, telles que le protocole utilisé par Kestrel. Pour plus d’informations, consultez Configuration dans ASP.NET Core.
  • Program.cs, qui contient :

Créer le client gRPC dans une application console .NET

  • Ouvrez une deuxième instance de Visual Studio et sélectionnez Nouveau projet.
  • Dans la boîte de dialogue Créer un projet, sélectionnez Application console, puis sélectionnez Suivant.
  • Dans la zone de texte Nom du projet, entrez GrpcGreeterClient et sélectionnez Suivant.
  • Dans la fenêtre de dialogue Informations supplémentaires, sélectionnez .NET 8.0 (prise en charge à long terme), puis sélectionnez Créer.

Ajouter les packages NuGet exigés

Le projet client gRPC requiert les packages NuGet suivants :

  • Grpc.Net.Client, qui contient le client .NET Core.
  • Google.Protobuf, qui contient des API de messages protobuf pour C#.
  • Grpc.Tools, qui contient la prise en charge des outils C# pour les fichiers protobuf. Le package d’outils n’est pas nécessaire lors de l’exécution. La dépendance est donc marquée avec PrivateAssets="All".

Installez les packages à l’aide de la console PMC (console du Gestionnaire de package) ou à partir de Gérer les packages NuGet.

Option de la console du Gestionnaire de package pour installer des packages

  • Dans Visual Studio, sélectionnez Outils>Gestionnaire de package NuGet>Console du Gestionnaire de package.

  • Dans la fenêtre Gestionnaire de package, exécutez cd GrpcGreeterClient pour accéder au dossier contenant les fichiers GrpcGreeterClient.csproj.

  • Exécutez les commandes suivantes :

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Option Gérer les packages NuGet pour installer les packages

  • Cliquez avec le bouton droit sur le projet dans Explorateur de solutions>Gérer les packages NuGet.
  • Sélectionnez l’onglet Parcourir.
  • Entrez Grpc.Net.Client dans la zone de recherche.
  • Sélectionnez le package Grpc.Net.Client sous l’onglet Parcourir et sélectionnez Installer.
  • Répétez pour Google.Protobuf et Grpc.Tools.

Ajouter greet.proto

  • Créez un dossier Protos dans le projet du client gRPC.

  • Copiez le fichier Protos\greet.proto du service Greeter gRPC dans le dossier Protos du projet du client gRPC.

  • Mettez à jour l’espace de noms à l’intérieur du fichier greet.proto vers l’espace de noms du projet :

    option csharp_namespace = "GrpcGreeterClient";
    
  • Modifier le fichier projet GrpcGreeterClient.csproj :

Cliquez avec le bouton droit sur le projet et sélectionnez Modifier le fichier de projet.

  • Ajoutez un groupe d’éléments avec un élément <Protobuf> qui fait référence au fichier greet.proto :

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Créer le client Greeter

  • Générez le projet client pour créer les types dans l’espace de noms GrpcGreeterClient.

Remarque

Les types GrpcGreeterClient sont générés automatiquement par le processus de génération. Le package d’outils Grpc.Tools génère les fichiers suivants en fonction du fichier greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs : code de mémoire tampon de protocole qui remplit, sérialise et récupère les types de messages de requête et de réponse.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs : contient les classes clientes générées.

Pour plus d’informations sur les ressources C# générées automatiquement par Grpc.Tools, consultez Services gRPC avec C# : ressources C# générées.

  • Mettez à jour le fichier Program.cs du client gRPC par le code suivant.

    using System.Threading.Tasks;
    using Grpc.Net.Client;
    using GrpcGreeterClient;
    
    // The port number must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:7042");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
    
  • Dans le code mis en surbrillance précédent, remplacez le numéro de port localhost 7042 par le numéro de port HTTPS spécifié dans Properties/launchSettings.json au sein du projet de service GrpcGreeter.

Program.cs contient le point d’entrée et la logique du client gRPC.

Le client Greeter est créé en :

  • Instanciant un GrpcChannel contenant les informations de création de la connexion au service gRPC.
  • Utilisant le GrpcChannel pour construire le client Greeter :
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Le client Greeter appelle la méthode SayHello asynchrone. Le résultat de l’appel SayHello s’affiche :

// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Tester le client gRPC avec le service Greeter gRPC

Mettez à jour le fichier appsettings.Development.json en ajoutant les lignes en surbrillance suivantes :

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • Dans le service Greeter, appuyez sur Ctrl+F5 pour démarrer le serveur sans le débogueur.
  • Dans le projet GrpcGreeterClient, appuyez sur Ctrl+F5 pour démarrer le client sans le débogueur.

Le client envoie une salutation au service avec un message contenant son nom, GreeterClient. Le service envoie le message « Hello GreeterClient » comme réponse. La réponse « Hello GreeterClient » s’affiche dans l’invite de commandes :

Greeting: Hello GreeterClient
Press any key to exit...

Le service gRPC enregistre les détails de l’appel réussi dans les journaux écrits dans l’invite de commandes :

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 78.32260000000001ms 200 application/grpc

Remarque

Le code de cet article requiert le certificat de développement ASP.NET Core HTTPS pour sécuriser le service gRPC. Si le client gRPC .NET échoue avec le message The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., le certificat de développement n’est pas approuvé. Pour régler ce problème, consultez Appeler un service gRPC avec un certificat non approuvé/non valide.

Étapes suivantes

Ce tutoriel montre comment créer un client gRPC .NET Core et un serveur gRPC ASP.NET Core. À la fin, vous disposerez d’un client gRPC qui communique avec le service Greeter gRPC.

Dans ce tutoriel, vous allez :

  • Créer un serveur gRPC.
  • Créez un client gRPC.
  • Testez le client gRPC avec le service Greeter gRPC.

Prérequis

Créer un service gRPC

  • Démarrez Visual Studio 2022 et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un nouveau projet, recherchez gRPC. Sélectionnez Service ASP.NET Core gRPC, puis sélectionnez Suivant.
  • Dans la boîte de dialogue Configurer votre nouveau projet, entrez GrpcGreeter pour Nom du projet. Il est important de nommer le projet GrpcGreeter pour que les espaces de noms correspondent quand vous copiez et collez du code.
  • Sélectionnez Suivant.
  • Dans la boîte de dialogue Informations supplémentaires, sélectionnez .NET 6.0 (prise en charge à long terme), puis sélectionnez Créer.

Exécuter le service

  • Appuyez sur Ctrl+F5 pour exécuter sans le débogueur.

    Visual Studio affiche la boîte de dialogue suivante lorsqu’un projet n’est pas encore configuré pour utiliser SSL :

    Ce projet est configuré pour utiliser SSL. Pour éviter les avertissements SSL dans le navigateur, vous pouvez choisir d’approuver le certificat auto-signé généré par IIS Express. Voulez-vous approuver le certificat SSL d’IIS Express ?

    Sélectionnez Oui si vous faites confiance au certificat SSL d’IIS Express.

    La boîte de dialogue suivante s’affiche :

    Boîte de dialogue Avertissement de sécurité

    Sélectionnez Oui si vous acceptez d’approuver le certificat de développement.

    Pour plus d’informations sur l’approbation du navigateur Firefox, consultez Erreur de certificat Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio :

    • Démarre le serveur Kestrel.
    • Lance un navigateur.
    • Accède à http://localhost:port, par exemple http://localhost:7042.
      • port : numéro de port attribué de manière aléatoire pour l’application.
      • localhost : nom d’hôte standard de l’ordinateur local. Localhost traite uniquement les requêtes web de l’ordinateur local.

Les journaux affichent le service à l’écoute sur https://localhost:<port>, où <port> est le numéro de port localhost attribué de manière aléatoire lorsque le projet est créé et défini dans Properties/launchSettings.json.

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Remarque

Le modèle gRPC est configuré pour utiliser le protocole Transport Layer Security (TLS). Les clients gRPC doivent utiliser le protocole HTTPS pour appeler le serveur. Le numéro de port localhost du service gRPC est attribué de manière aléatoire lorsque le projet est créé et défini dans le fichier Properties\launchSettings.json du projet de service gRPC.

MacOS ne prend pas en charge ASP.NET Core gRPC avec TLS. Une configuration supplémentaire est nécessaire pour exécuter correctement les services gRPC sur MacOS. Pour plus d’informations, consultez Impossible de démarrer l’application ASP.NET Core gRPC sur MacOS.

Examiner les fichiers projet

Fichiers projet GrpcGreeter :

  • Protos/greet.proto : définit le gRPC Greeter et est utilisé pour générer les ressources du serveur gRPC. Pour plus d’informations, consultez Introduction à gRPC.
  • Dossier Services : contient l’implémentation du service Greeter.
  • appSettings.json : contient des données de configuration, telles que le protocole utilisé par Kestrel. Pour plus d’informations, consultez Configuration dans ASP.NET Core.
  • Program.cs, qui contient :

Créer le client gRPC dans une application console .NET

  • Ouvrez une deuxième instance de Visual Studio et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un nouveau projet, sélectionnez Application console, puis sélectionnez Suivant.
  • Dans la zone de texte Nom du projet, entrez GrpcGreeterClient et sélectionnez Suivant.
  • Dans la boîte de dialogue Informations supplémentaires, sélectionnez .NET 6.0 (prise en charge à long terme), puis sélectionnez Créer.

Ajouter les packages NuGet exigés

Le projet client gRPC requiert les packages NuGet suivants :

  • Grpc.Net.Client, qui contient le client .NET Core.
  • Google.Protobuf, qui contient des API de messages protobuf pour C#.
  • Grpc.Tools, qui contient la prise en charge des outils C# pour les fichiers protobuf. Le package d’outils n’est pas nécessaire lors de l’exécution. La dépendance est donc marquée avec PrivateAssets="All".

Installez les packages à l’aide de la console PMC (console du Gestionnaire de package) ou à partir de Gérer les packages NuGet.

Option de la console du Gestionnaire de package pour installer des packages

  • Dans Visual Studio, sélectionnez Outils>Gestionnaire de package NuGet>Console du Gestionnaire de package.

  • Dans la fenêtre Gestionnaire de package, exécutez cd GrpcGreeterClient pour accéder au dossier contenant les fichiers GrpcGreeterClient.csproj.

  • Exécutez les commandes suivantes :

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Option Gérer les packages NuGet pour installer les packages

  • Cliquez avec le bouton droit sur le projet dans Explorateur de solutions>Gérer les packages NuGet.
  • Sélectionnez l’onglet Parcourir.
  • Entrez Grpc.Net.Client dans la zone de recherche.
  • Sélectionnez le package Grpc.Net.Client sous l’onglet Parcourir et sélectionnez Installer.
  • Répétez pour Google.Protobuf et Grpc.Tools.

Ajouter greet.proto

  • Créez un dossier Protos dans le projet du client gRPC.

  • Copiez le fichier Protos\greet.proto du service Greeter gRPC dans le dossier Protos du projet du client gRPC.

  • Mettez à jour l’espace de noms à l’intérieur du fichier greet.proto vers l’espace de noms du projet :

    option csharp_namespace = "GrpcGreeterClient";
    
  • Modifier le fichier projet GrpcGreeterClient.csproj :

Cliquez avec le bouton droit sur le projet et sélectionnez Modifier le fichier de projet.

  • Ajoutez un groupe d’éléments avec un élément <Protobuf> qui fait référence au fichier greet.proto :

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Créer le client Greeter

  • Générez le projet client pour créer les types dans l’espace de noms GrpcGreeterClient.

Remarque

Les types GrpcGreeterClient sont générés automatiquement par le processus de génération. Le package d’outils Grpc.Tools génère les fichiers suivants en fonction du fichier greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs : code de mémoire tampon de protocole qui remplit, sérialise et récupère les types de messages de requête et de réponse.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs : contient les classes clientes générées.

Pour plus d’informations sur les ressources C# générées automatiquement par Grpc.Tools, consultez Services gRPC avec C# : ressources C# générées.

  • Mettez à jour le fichier Program.cs du client gRPC par le code suivant.

    using System.Threading.Tasks;
    using Grpc.Net.Client;
    using GrpcGreeterClient;
    
    // The port number must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:7042");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
    
  • Dans le code mis en surbrillance précédent, remplacez le numéro de port localhost 7042 par le numéro de port HTTPS spécifié dans Properties/launchSettings.json au sein du projet de service GrpcGreeter.

Program.cs contient le point d’entrée et la logique du client gRPC.

Le client Greeter est créé en :

  • Instanciant un GrpcChannel contenant les informations de création de la connexion au service gRPC.
  • Utilisant le GrpcChannel pour construire le client Greeter :
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Le client Greeter appelle la méthode SayHello asynchrone. Le résultat de l’appel SayHello s’affiche :

// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Tester le client gRPC avec le service Greeter gRPC

Mettez à jour le fichier appsettings.Development.json en ajoutant les lignes en surbrillance suivantes :

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • Dans le service Greeter, appuyez sur Ctrl+F5 pour démarrer le serveur sans le débogueur.
  • Dans le projet GrpcGreeterClient, appuyez sur Ctrl+F5 pour démarrer le client sans le débogueur.

Le client envoie une salutation au service avec un message contenant son nom, GreeterClient. Le service envoie le message « Hello GreeterClient » comme réponse. La réponse « Hello GreeterClient » s’affiche dans l’invite de commandes :

Greeting: Hello GreeterClient
Press any key to exit...

Le service gRPC enregistre les détails de l’appel réussi dans les journaux écrits dans l’invite de commandes :

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 78.32260000000001ms 200 application/grpc

Remarque

Le code de cet article requiert le certificat de développement ASP.NET Core HTTPS pour sécuriser le service gRPC. Si le client gRPC .NET échoue avec le message The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., le certificat de développement n’est pas approuvé. Pour régler ce problème, consultez Appeler un service gRPC avec un certificat non approuvé/non valide.

Étapes suivantes

Ce tutoriel montre comment créer un client gRPC .NET Core et un serveur gRPC ASP.NET Core. À la fin, vous disposerez d’un client gRPC qui communique avec le service Greeter gRPC.

Dans ce tutoriel, vous allez :

  • Créer un serveur gRPC.
  • Créez un client gRPC.
  • Testez le client gRPC avec le service Greeter gRPC.

Prérequis

Créer un service gRPC

  • Démarrez Visual Studio 2022 et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un nouveau projet, recherchez gRPC. Sélectionnez Service ASP.NET Core gRPC, puis sélectionnez Suivant.
  • Dans la boîte de dialogue Configurer votre nouveau projet, entrez GrpcGreeter pour Nom du projet. Il est important de nommer le projet GrpcGreeter pour que les espaces de noms correspondent quand vous copiez et collez du code.
  • Sélectionnez Suivant.
  • Dans la boîte de dialogue Informations supplémentaires, sélectionnez .NET 6.0 (prise en charge à long terme), puis sélectionnez Créer.

Exécuter le service

  • Appuyez sur Ctrl+F5 pour exécuter sans le débogueur.

    Visual Studio affiche la boîte de dialogue suivante lorsqu’un projet n’est pas encore configuré pour utiliser SSL :

    Ce projet est configuré pour utiliser SSL. Pour éviter les avertissements SSL dans le navigateur, vous pouvez choisir d’approuver le certificat auto-signé généré par IIS Express. Voulez-vous approuver le certificat SSL d’IIS Express ?

    Sélectionnez Oui si vous faites confiance au certificat SSL d’IIS Express.

    La boîte de dialogue suivante s’affiche :

    Boîte de dialogue Avertissement de sécurité

    Sélectionnez Oui si vous acceptez d’approuver le certificat de développement.

    Pour plus d’informations sur l’approbation du navigateur Firefox, consultez Erreur de certificat Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio :

    • Démarre le serveur Kestrel.
    • Lance un navigateur.
    • Accède à http://localhost:port, par exemple http://localhost:7042.
      • port : numéro de port attribué de manière aléatoire pour l’application.
      • localhost : nom d’hôte standard de l’ordinateur local. Localhost traite uniquement les requêtes web de l’ordinateur local.

Les journaux affichent le service à l’écoute sur https://localhost:<port>, où <port> est le numéro de port localhost attribué de manière aléatoire lorsque le projet est créé et défini dans Properties/launchSettings.json.

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Remarque

Le modèle gRPC est configuré pour utiliser le protocole Transport Layer Security (TLS). Les clients gRPC doivent utiliser le protocole HTTPS pour appeler le serveur. Le numéro de port localhost du service gRPC est attribué de manière aléatoire lorsque le projet est créé et défini dans le fichier Properties\launchSettings.json du projet de service gRPC.

MacOS ne prend pas en charge ASP.NET Core gRPC avec TLS. Une configuration supplémentaire est nécessaire pour exécuter correctement les services gRPC sur MacOS. Pour plus d’informations, consultez Impossible de démarrer l’application ASP.NET Core gRPC sur MacOS.

Examiner les fichiers projet

Fichiers projet GrpcGreeter :

  • Protos/greet.proto : définit le gRPC Greeter et est utilisé pour générer les ressources du serveur gRPC. Pour plus d’informations, consultez Introduction à gRPC.
  • Dossier Services : contient l’implémentation du service Greeter.
  • appSettings.json : contient des données de configuration, telles que le protocole utilisé par Kestrel. Pour plus d’informations, consultez Configuration dans ASP.NET Core.
  • Program.cs, qui contient :

Créer le client gRPC dans une application console .NET

  • Ouvrez une deuxième instance de Visual Studio et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un nouveau projet, sélectionnez Application console, puis sélectionnez Suivant.
  • Dans la zone de texte Nom du projet, entrez GrpcGreeterClient et sélectionnez Suivant.
  • Dans la boîte de dialogue Informations supplémentaires, sélectionnez .NET 6.0 (prise en charge à long terme), puis sélectionnez Créer.

Ajouter les packages NuGet exigés

Le projet client gRPC requiert les packages NuGet suivants :

  • Grpc.Net.Client, qui contient le client .NET Core.
  • Google.Protobuf, qui contient des API de messages protobuf pour C#.
  • Grpc.Tools, qui contient la prise en charge des outils C# pour les fichiers protobuf. Le package d’outils n’est pas nécessaire lors de l’exécution. La dépendance est donc marquée avec PrivateAssets="All".

Installez les packages à l’aide de la console PMC (console du Gestionnaire de package) ou à partir de Gérer les packages NuGet.

Option de la console du Gestionnaire de package pour installer des packages

  • Dans Visual Studio, sélectionnez Outils>Gestionnaire de package NuGet>Console du Gestionnaire de package.

  • Dans la fenêtre Gestionnaire de package, exécutez cd GrpcGreeterClient pour accéder au dossier contenant les fichiers GrpcGreeterClient.csproj.

  • Exécutez les commandes suivantes :

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Option Gérer les packages NuGet pour installer les packages

  • Cliquez avec le bouton droit sur le projet dans Explorateur de solutions>Gérer les packages NuGet.
  • Sélectionnez l’onglet Parcourir.
  • Entrez Grpc.Net.Client dans la zone de recherche.
  • Sélectionnez le package Grpc.Net.Client sous l’onglet Parcourir et sélectionnez Installer.
  • Répétez pour Google.Protobuf et Grpc.Tools.

Ajouter greet.proto

  • Créez un dossier Protos dans le projet du client gRPC.

  • Copiez le fichier Protos\greet.proto du service Greeter gRPC dans le dossier Protos du projet du client gRPC.

  • Mettez à jour l’espace de noms à l’intérieur du fichier greet.proto vers l’espace de noms du projet :

    option csharp_namespace = "GrpcGreeterClient";
    
  • Modifier le fichier projet GrpcGreeterClient.csproj :

Cliquez avec le bouton droit sur le projet et sélectionnez Modifier le fichier de projet.

  • Ajoutez un groupe d’éléments avec un élément <Protobuf> qui fait référence au fichier greet.proto :

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Créer le client Greeter

  • Générez le projet client pour créer les types dans l’espace de noms GrpcGreeterClient.

Remarque

Les types GrpcGreeterClient sont générés automatiquement par le processus de génération. Le package d’outils Grpc.Tools génère les fichiers suivants en fonction du fichier greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs : code de mémoire tampon de protocole qui remplit, sérialise et récupère les types de messages de requête et de réponse.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs : contient les classes clientes générées.

Pour plus d’informations sur les ressources C# générées automatiquement par Grpc.Tools, consultez Services gRPC avec C# : ressources C# générées.

  • Mettez à jour le fichier Program.cs du client gRPC par le code suivant.

    using System.Threading.Tasks;
    using Grpc.Net.Client;
    using GrpcGreeterClient;
    
    // The port number must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:7042");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
    
  • Dans le code mis en surbrillance précédent, remplacez le numéro de port localhost 7042 par le numéro de port HTTPS spécifié dans Properties/launchSettings.json au sein du projet de service GrpcGreeter.

Program.cs contient le point d’entrée et la logique du client gRPC.

Le client Greeter est créé en :

  • Instanciant un GrpcChannel contenant les informations de création de la connexion au service gRPC.
  • Utilisant le GrpcChannel pour construire le client Greeter :
// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Le client Greeter appelle la méthode SayHello asynchrone. Le résultat de l’appel SayHello s’affiche :

// The port number must match the port of the gRPC server.
using var channel = GrpcChannel.ForAddress("https://localhost:7042");
var client = new Greeter.GreeterClient(channel);
var reply = await client.SayHelloAsync(
                  new HelloRequest { Name = "GreeterClient" });
Console.WriteLine("Greeting: " + reply.Message);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();

Tester le client gRPC avec le service Greeter gRPC

  • Dans le service Greeter, appuyez sur Ctrl+F5 pour démarrer le serveur sans le débogueur.
  • Dans le projet GrpcGreeterClient, appuyez sur Ctrl+F5 pour démarrer le client sans le débogueur.

Le client envoie une salutation au service avec un message contenant son nom, GreeterClient. Le service envoie le message « Hello GreeterClient » comme réponse. La réponse « Hello GreeterClient » s’affiche dans l’invite de commandes :

Greeting: Hello GreeterClient
Press any key to exit...

Le service gRPC enregistre les détails de l’appel réussi dans les journaux écrits dans l’invite de commandes :

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:<port>
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/2 POST https://localhost:<port>/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 78.32260000000001ms 200 application/grpc

Mettez à jour le fichier appsettings.Development.json en ajoutant les lignes suivantes :

"Microsoft.AspNetCore.Hosting": "Information",
"Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"

Remarque

Le code de cet article requiert le certificat de développement ASP.NET Core HTTPS pour sécuriser le service gRPC. Si le client gRPC .NET échoue avec le message The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., le certificat de développement n’est pas approuvé. Pour régler ce problème, consultez Appeler un service gRPC avec un certificat non approuvé/non valide.

Étapes suivantes

Ce tutoriel montre comment créer un client gRPC .NET Core et un serveur gRPC ASP.NET Core.

À la fin, vous disposerez d’un client gRPC qui communique avec le service Greeter gRPC.

Affichez ou téléchargez un exemple de code (procédure de téléchargement).

Dans ce didacticiel, vous avez effectué les actions suivantes :

  • Créer un serveur gRPC.
  • Créez un client gRPC.
  • Testez le client gRPC avec le service Greeter gRPC.

Prérequis

Créer un service gRPC

  • Démarrez Visual Studio et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un nouveau projet, sélectionnez Service gPRC, puis sélectionnez Suivant.
  • Dans la boîte de dialogue Configurer votre nouveau projet, entrez GrpcGreeter pour Nom du projet. Il est important de nommer le projet GrpcGreeter pour que les espaces de noms correspondent quand vous copiez et collez du code.
  • Cliquez sur Suivant.
  • Dans la boîte de dialogue Informations supplémentaires, sélectionnez .NET 5.0 dans la liste déroulante Framework cible.
  • Cliquez sur Créer.

Exécuter le service

  • Appuyez sur Ctrl+F5 pour exécuter sans le débogueur.

    Visual Studio affiche la boîte de dialogue suivante lorsqu’un projet n’est pas encore configuré pour utiliser SSL :

    Ce projet est configuré pour utiliser SSL. Pour éviter les avertissements SSL dans le navigateur, vous pouvez choisir d’approuver le certificat auto-signé généré par IIS Express. Voulez-vous approuver le certificat SSL d’IIS Express ?

    Sélectionnez Oui si vous faites confiance au certificat SSL d’IIS Express.

    La boîte de dialogue suivante s’affiche :

    Boîte de dialogue Avertissement de sécurité

    Sélectionnez Oui si vous acceptez d’approuver le certificat de développement.

    Pour plus d’informations sur l’approbation du navigateur Firefox, consultez Erreur de certificat Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio démarre IIS Express et exécute l’application. La barre d’adresses affiche localhost:port# au lieu de quelque chose qui ressemble à example.com. La raison en est que localhost est le nom d’hôte standard de l’ordinateur local. Localhost traite uniquement les requêtes web de l’ordinateur local. Quand Visual Studio crée un projet web, un port aléatoire est utilisé pour le serveur web.

Les journaux indiquent que le service écoute sur https://localhost:5001.

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Remarque

Le modèle gRPC est configuré pour utiliser le protocole Transport Layer Security (TLS). Les clients gRPC doivent utiliser le protocole HTTPS pour appeler le serveur.

MacOS ne prend pas en charge ASP.NET Core gRPC avec TLS. Une configuration supplémentaire est nécessaire pour exécuter correctement les services gRPC sur MacOS. Pour plus d’informations, consultez Impossible de démarrer l’application ASP.NET Core gRPC sur MacOS.

Examiner les fichiers projet

Fichiers projet GrpcGreeter :

  • greet.proto : le fichier Protos/greet.proto définit le gRPC Greeter et est utilisé pour générer les ressources du serveur gRPC. Pour plus d’informations, consultez Introduction à gRPC.
  • Dossier Services : contient l’implémentation du service Greeter.
  • appsettings.json : contient des données de configuration, telles que le protocole utilisé par Kestrel. Pour plus d’informations, consultez Configuration dans ASP.NET Core.
  • Program.cs : contient le point d’entrée du service gRPC. Pour plus d’informations, consultez Hôte générique .NET dans ASP.NET Core.
  • Startup.cs : contient le code qui configure le comportement de l’application. Pour plus d’informations, consultez Démarrage des applications.

Créer le client gRPC dans une application console .NET

  • Ouvrez une deuxième instance de Visual Studio et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un projet, sélectionnez Application console (.NET Core), puis sélectionnez Suivant.
  • Dans la zone de texte Nom du projet, entrez GrpcGreeterClient et sélectionnez Créer.

Ajouter les packages nécessaires

Le projet client gRPC requiert les packages suivants :

  • Grpc.Net.Client, qui contient le client .NET Core.
  • Google.Protobuf, qui contient des API de messages protobuf pour C#.
  • Grpc.Tools, qui contient la prise en charge des outils C# pour les fichiers protobuf. Le package d’outils n’est pas nécessaire lors de l’exécution. La dépendance est donc marquée avec PrivateAssets="All".

Installez les packages à l’aide de la console PMC (console du Gestionnaire de package) ou à partir de Gérer les packages NuGet.

Option de la console du Gestionnaire de package pour installer des packages

  • Dans Visual Studio, sélectionnez Outils>Gestionnaire de package NuGet>Console du Gestionnaire de package.

  • Dans la fenêtre Gestionnaire de package, exécutez cd GrpcGreeterClient pour accéder au dossier contenant les fichiers GrpcGreeterClient.csproj.

  • Exécutez les commandes suivantes :

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Option Gérer les packages NuGet pour installer les packages

  • Cliquez avec le bouton droit sur le projet dans Explorateur de solutions>Gérer les packages NuGet.
  • Sélectionnez l’onglet Parcourir.
  • Entrez Grpc.Net.Client dans la zone de recherche.
  • Sélectionnez le package Grpc.Net.Client sous l’onglet Parcourir et sélectionnez Installer.
  • Répétez pour Google.Protobuf et Grpc.Tools.

Ajouter greet.proto

  • Créez un dossier Protos dans le projet du client gRPC.

  • Copiez le fichier Protos\greet.proto du service Greeter gRPC dans le dossier Protos du projet du client gRPC.

  • Mettez à jour l’espace de noms à l’intérieur du fichier greet.proto vers l’espace de noms du projet :

    option csharp_namespace = "GrpcGreeterClient";
    
  • Modifier le fichier projet GrpcGreeterClient.csproj :

    Cliquez avec le bouton droit sur le projet et sélectionnez Modifier le fichier de projet.


  • Ajoutez un groupe d’éléments avec un élément <Protobuf> qui fait référence au fichier greet.proto :

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Créer le client Greeter

  • Générez le projet client pour créer les types dans l’espace de noms GrpcGreeterClient.

Remarque

Les types GrpcGreeterClient sont générés automatiquement par le processus de génération. Le package d’outils Grpc.Tools génère les fichiers suivants en fonction du fichier greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs : code de mémoire tampon de protocole qui remplit, sérialise et récupère les types de messages de requête et de réponse.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs : contient les classes clientes générées.

Pour plus d’informations sur les ressources C# générées automatiquement par Grpc.Tools, consultez Services gRPC avec C# : ressources C# générées.

  • Mettez à jour le fichier Program.cs du client gRPC par le code suivant :

    using System;
    using System.Net.Http;
    using System.Threading.Tasks;
    using Grpc.Net.Client;
    
    namespace GrpcGreeterClient
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                // The port number(5001) must match the port of the gRPC server.
                using var channel = GrpcChannel.ForAddress("https://localhost:5001");
                var client = new Greeter.GreeterClient(channel);
                var reply = await client.SayHelloAsync(
                                  new HelloRequest { Name = "GreeterClient" });
                Console.WriteLine("Greeting: " + reply.Message);
                Console.WriteLine("Press any key to exit...");
                Console.ReadKey();
            }
        }
    }
    

Program.cs contient le point d’entrée et la logique du client gRPC.

Le client Greeter est créé en :

  • Instanciant un GrpcChannel contenant les informations de création de la connexion au service gRPC.
  • Utilisant le GrpcChannel pour construire le client Greeter :
static async Task Main(string[] args)
{
    // The port number(5001) must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:5001");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
}

Le client Greeter appelle la méthode SayHello asynchrone. Le résultat de l’appel SayHello s’affiche :

static async Task Main(string[] args)
{
    // The port number(5001) must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:5001");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
}

Tester le client gRPC avec le service Greeter gRPC

  • Dans le service Greeter, appuyez sur Ctrl+F5 pour démarrer le serveur sans le débogueur.
  • Dans le projet GrpcGreeterClient, appuyez sur Ctrl+F5 pour démarrer le client sans le débogueur.

Le client envoie une salutation au service avec un message contenant son nom, GreeterClient. Le service envoie le message « Hello GreeterClient » comme réponse. La réponse « Hello GreeterClient » s’affiche dans l’invite de commandes :

Greeting: Hello GreeterClient
Press any key to exit...

Le service gRPC enregistre les détails de l’appel réussi dans les journaux écrits dans l’invite de commandes :

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 78.32260000000001ms 200 application/grpc

Remarque

Le code de cet article requiert le certificat de développement ASP.NET Core HTTPS pour sécuriser le service gRPC. Si le client gRPC .NET échoue avec le message The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., le certificat de développement n’est pas approuvé. Pour régler ce problème, consultez Appeler un service gRPC avec un certificat non approuvé/non valide.

Étapes suivantes

Ce tutoriel montre comment créer un client gRPC .NET Core et un serveur gRPC ASP.NET Core.

À la fin, vous disposerez d’un client gRPC qui communique avec le service Greeter gRPC.

Affichez ou téléchargez un exemple de code (procédure de téléchargement).

Dans ce didacticiel, vous avez effectué les actions suivantes :

  • Créer un serveur gRPC.
  • Créez un client gRPC.
  • Testez le client gRPC avec le service Greeter gRPC.

Prérequis

Créer un service gRPC

  • Démarrez Visual Studio et sélectionnez Créer un projet. Vous pouvez également, dans le menu Fichier de Visual Studio, sélectionner Nouveau>Projet.

  • Dans la boîte de dialogue Créer un nouveau projet, sélectionnez Service gPRC, puis sélectionnez Suivant :

    Créer un nouveau projet dans Visual Studio

  • Nommez le projet GrpcGreeter. Il est important de nommer le projet GrpcGreeter pour que les espaces de noms correspondent quand vous copiez et collez du code.

  • Cliquez sur Créer.

  • Dans la boîte de dialogue Créer un service gRPC :

    • Le modèle Service gRPC est sélectionné.
    • Sélectionnez Create (Créer).

Exécuter le service

  • Appuyez sur Ctrl+F5 pour exécuter sans le débogueur.

    Visual Studio affiche la boîte de dialogue suivante lorsqu’un projet n’est pas encore configuré pour utiliser SSL :

    Ce projet est configuré pour utiliser SSL. Pour éviter les avertissements SSL dans le navigateur, vous pouvez choisir d’approuver le certificat auto-signé généré par IIS Express. Voulez-vous approuver le certificat SSL d’IIS Express ?

    Sélectionnez Oui si vous faites confiance au certificat SSL d’IIS Express.

    La boîte de dialogue suivante s’affiche :

    Boîte de dialogue Avertissement de sécurité

    Sélectionnez Oui si vous acceptez d’approuver le certificat de développement.

    Pour plus d’informations sur l’approbation du navigateur Firefox, consultez Erreur de certificat Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio démarre IIS Express et exécute l’application. La barre d’adresses affiche localhost:port# au lieu de quelque chose qui ressemble à example.com. La raison en est que localhost est le nom d’hôte standard de l’ordinateur local. Localhost traite uniquement les requêtes web de l’ordinateur local. Quand Visual Studio crée un projet web, un port aléatoire est utilisé pour le serveur web.

Les journaux indiquent que le service écoute sur https://localhost:5001.

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development

Remarque

Le modèle gRPC est configuré pour utiliser le protocole Transport Layer Security (TLS). Les clients gRPC doivent utiliser le protocole HTTPS pour appeler le serveur.

MacOS ne prend pas en charge ASP.NET Core gRPC avec TLS. Une configuration supplémentaire est nécessaire pour exécuter correctement les services gRPC sur MacOS. Pour plus d’informations, consultez Impossible de démarrer l’application ASP.NET Core gRPC sur MacOS.

Examiner les fichiers projet

Fichiers projet GrpcGreeter :

  • greet.proto : le fichier Protos/greet.proto définit le gRPC Greeter et est utilisé pour générer les ressources du serveur gRPC. Pour plus d’informations, consultez Introduction à gRPC.
  • Dossier Services : contient l’implémentation du service Greeter.
  • appsettings.json : contient des données de configuration, telles que le protocole utilisé par Kestrel. Pour plus d’informations, consultez Configuration dans ASP.NET Core.
  • Program.cs : contient le point d’entrée du service gRPC. Pour plus d’informations, consultez Hôte générique .NET dans ASP.NET Core.
  • Startup.cs : contient le code qui configure le comportement de l’application. Pour plus d’informations, consultez Démarrage des applications.

Créer le client gRPC dans une application console .NET

  • Ouvrez une deuxième instance de Visual Studio et sélectionnez Créer un projet.
  • Dans la boîte de dialogue Créer un projet, sélectionnez Application console (.NET Core), puis sélectionnez Suivant.
  • Dans la zone de texte Nom du projet, entrez GrpcGreeterClient et sélectionnez Créer.

Ajouter les packages nécessaires

Le projet client gRPC requiert les packages suivants :

  • Grpc.Net.Client, qui contient le client .NET Core.
  • Google.Protobuf, qui contient des API de messages protobuf pour C#.
  • Grpc.Tools, qui contient la prise en charge des outils C# pour les fichiers protobuf. Le package d’outils n’est pas nécessaire lors de l’exécution. La dépendance est donc marquée avec PrivateAssets="All".

Installez les packages à l’aide de la console PMC (console du Gestionnaire de package) ou à partir de Gérer les packages NuGet.

Option de la console du Gestionnaire de package pour installer des packages

  • Dans Visual Studio, sélectionnez Outils>Gestionnaire de package NuGet>Console du Gestionnaire de package.

  • Dans la fenêtre Gestionnaire de package, exécutez cd GrpcGreeterClient pour accéder au dossier contenant les fichiers GrpcGreeterClient.csproj.

  • Exécutez les commandes suivantes :

    Install-Package Grpc.Net.Client
    Install-Package Google.Protobuf
    Install-Package Grpc.Tools
    

Option Gérer les packages NuGet pour installer les packages

  • Cliquez avec le bouton droit sur le projet dans Explorateur de solutions>Gérer les packages NuGet.
  • Sélectionnez l’onglet Parcourir.
  • Entrez Grpc.Net.Client dans la zone de recherche.
  • Sélectionnez le package Grpc.Net.Client sous l’onglet Parcourir et sélectionnez Installer.
  • Répétez pour Google.Protobuf et Grpc.Tools.

Ajouter greet.proto

  • Créez un dossier Protos dans le projet du client gRPC.

  • Copiez le fichier Protos\greet.proto du service Greeter gRPC dans le dossier Protos du projet du client gRPC.

  • Mettez à jour l’espace de noms à l’intérieur du fichier greet.proto vers l’espace de noms du projet :

    option csharp_namespace = "GrpcGreeterClient";
    
  • Modifier le fichier projet GrpcGreeterClient.csproj :

    Cliquez avec le bouton droit sur le projet et sélectionnez Modifier le fichier de projet.


  • Ajoutez un groupe d’éléments avec un élément <Protobuf> qui fait référence au fichier greet.proto :

    <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Client" />
    </ItemGroup>
    

Créer le client Greeter

  • Générez le projet client pour créer les types dans l’espace de noms GrpcGreeterClient.

Remarque

Les types GrpcGreeterClient sont générés automatiquement par le processus de génération. Le package d’outils Grpc.Tools génère les fichiers suivants en fonction du fichier greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs : code de mémoire tampon de protocole qui remplit, sérialise et récupère les types de messages de requête et de réponse.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs : contient les classes clientes générées.

Pour plus d’informations sur les ressources C# générées automatiquement par Grpc.Tools, consultez Services gRPC avec C# : ressources C# générées.

Mettez à jour le fichier Program.cs du client gRPC par le code suivant :

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Grpc.Net.Client;

namespace GrpcGreeterClient
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // The port number(5001) must match the port of the gRPC server.
            using var channel = GrpcChannel.ForAddress("https://localhost:5001");
            var client = new Greeter.GreeterClient(channel);
            var reply = await client.SayHelloAsync(
                              new HelloRequest { Name = "GreeterClient" });
            Console.WriteLine("Greeting: " + reply.Message);
            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Program.cs contient le point d’entrée et la logique du client gRPC.

Le client Greeter est créé en :

  • Instanciant un GrpcChannel contenant les informations de création de la connexion au service gRPC.
  • Utilisant le GrpcChannel pour construire le client Greeter :
static async Task Main(string[] args)
{
    // The port number(5001) must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:5001");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
}

Le client Greeter appelle la méthode SayHello asynchrone. Le résultat de l’appel SayHello s’affiche :

static async Task Main(string[] args)
{
    // The port number(5001) must match the port of the gRPC server.
    using var channel = GrpcChannel.ForAddress("https://localhost:5001");
    var client = new Greeter.GreeterClient(channel);
    var reply = await client.SayHelloAsync(
                      new HelloRequest { Name = "GreeterClient" });
    Console.WriteLine("Greeting: " + reply.Message);
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
}

Tester le client gRPC avec le service Greeter gRPC

  • Dans le service Greeter, appuyez sur Ctrl+F5 pour démarrer le serveur sans le débogueur.
  • Dans le projet GrpcGreeterClient, appuyez sur Ctrl+F5 pour démarrer le client sans le débogueur.

Le client envoie une salutation au service avec un message contenant son nom, GreeterClient. Le service envoie le message « Hello GreeterClient » comme réponse. La réponse « Hello GreeterClient » s’affiche dans l’invite de commandes :

Greeting: Hello GreeterClient
Press any key to exit...

Le service gRPC enregistre les détails de l’appel réussi dans les journaux écrits dans l’invite de commandes :

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\GH\aspnet\docs\4\Docs\aspnetcore\tutorials\grpc\grpc-start\sample\GrpcGreeter
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/2 POST https://localhost:5001/Greet.Greeter/SayHello application/grpc
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'gRPC - /Greet.Greeter/SayHello'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 78.32260000000001ms 200 application/grpc

Remarque

Le code de cet article requiert le certificat de développement ASP.NET Core HTTPS pour sécuriser le service gRPC. Si le client gRPC .NET échoue avec le message The remote certificate is invalid according to the validation procedure. ou The SSL connection could not be established., le certificat de développement n’est pas approuvé. Pour régler ce problème, consultez Appeler un service gRPC avec un certificat non approuvé/non valide.

Étapes suivantes