Delen via


Zelfstudie: Een gRPC-client en -server maken in ASP.NET Core

Deze zelfstudie laat zien hoe u een .NET Core-gRPC--client en een ASP.NET Core gRPC-server maakt. Aan het einde hebt u een gRPC-client die communiceert met de gRPC Greeter-service.

In deze zelfstudie gaat u het volgende doen:

  • Maak een gRPC-server.
  • Maak een gRPC-client.
  • Test de gRPC-client met de gRPC Greeter-service.

Voorwaarden

Een gRPC-service maken

  • Start Visual Studio 2022 en selecteer Nieuw project.
  • Zoek in het dialoogvenster Een nieuw project maken naar gRPC. Selecteer ASP.NET Core gRPC Service en selecteer Volgende.
  • Voer in het dialoogvenster Uw nieuwe project configurerenGrpcGreeter in voor Projectnaam. Het is belangrijk om het project een naam te geven GrpcGreeter zodat de naamruimten overeenkomen wanneer u code kopieert en plakt.
  • Selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie.NET 9.0 (Standard Term Support) en selecteer vervolgens Maken.

De service uitvoeren

  • Druk op Ctrl+F5 om uit te voeren zonder het foutopsporingsprogramma.

    Visual Studio geeft het volgende dialoogvenster weer wanneer een project nog niet is geconfigureerd voor het gebruik van SSL:

    Dit project is geconfigureerd voor het gebruik van SSL. Als u SSL-waarschuwingen in de browser wilt voorkomen, kunt u ervoor kiezen om het zelfondertekende certificaat te vertrouwen dat IIS Express heeft gegenereerd. Wilt u het IIS Express SSL-certificaat vertrouwen?

    Selecteer Ja als u het IIS Express SSL-certificaat vertrouwt.

    Het volgende dialoogvenster wordt weergegeven:

    beveiligingswaarschuwingsdialoogvenster

    Selecteer Ja als u akkoord gaat met het vertrouwen van het ontwikkelingscertificaat.

    Zie Firefox SEC_ERROR_INADEQUATE_KEY_USAGE certificaatfoutvoor meer informatie over het vertrouwen van de Firefox-browser.

    Visual Studio:

    • Start Kestrel-server.
    • Hiermee wordt een browser gestart.
    • Hiermee gaat u naar http://localhost:port, zoals http://localhost:7042.
      • poort: een willekeurig toegewezen poortnummer voor de app.
      • localhost: de standaardhostnaam voor de lokale computer. Localhost dient alleen webaanvragen van de lokale computer.

In de logboeken wordt de service weergegeven die luistert op https://localhost:<port>, waarbij <port> het localhost-poortnummer is dat willekeurig is toegewezen wanneer het project wordt gemaakt en ingesteld in 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

Notitie

De gRPC-sjabloon is geconfigureerd voor het gebruik van TLS-(Transport Layer Security). gRPC-clients moeten HTTPS gebruiken om de server aan te roepen. Het localhostpoortnummer van de gRPC-service wordt willekeurig toegewezen wanneer het project wordt gemaakt en ingesteld in de Eigenschappen\launchSettings.jsop bestand van het gRPC-serviceproject.

De projectbestanden onderzoeken

GrpcGreeter projectbestanden:

  • Protos/greet.proto: definieert de Greeter gRPC en wordt gebruikt om de gRPC-serverassets te genereren. Zie Inleiding tot gRPC-voor meer informatie.
  • Services map: Bevat de implementatie van de Greeter-service.
  • appSettings.json: bevat configuratiegegevens zoals het protocol dat door Kestrelwordt gebruikt. Zie Configuratie in ASP.NET Corevoor meer informatie.
  • Program.cs, die het volgende bevat:

De gRPC-client maken in een .NET-console-app

  • Open een tweede exemplaar van Visual Studio en selecteer Nieuw project.
  • Selecteer in het dialoogvenster Een nieuw project makenConsole-appen selecteer Volgende.
  • Voer in het tekstvak ProjectnaamGrpcGreeterClient in en selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie.NET 9.0 (Standaardtermijnondersteuning) en selecteer daarna Maken.

Vereiste NuGet-pakketten toevoegen

Voor het gRPC-clientproject zijn de volgende NuGet-pakketten vereist:

  • Grpc.Net.Client, die de .NET Core-client bevat.
  • Google.Protobuf, die protobuf-bericht-API's voor C# bevat.
  • Grpc.Tools, die C#-toolingondersteuning voor protobuf-bestanden bevatten. Het hulpprogrammapakket is niet vereist tijdens runtime, dus de afhankelijkheid wordt gemarkeerd met PrivateAssets="All".

Installeer de pakketten met behulp van de Package Manager Console (PMC) of NuGet-pakketten beheren.

PMC-optie voor het installeren van pakketten

  • Kies in Visual Studio Tools>NuGet Package Manager>Package Manager Console

  • Voer in het Venster Package Manager Consolecd GrpcGreeterClient uit om mappen te wijzigen in de map met de GrpcGreeterClient.csproj-bestanden.

  • Voer de volgende opdrachten uit:

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

Optie NuGet-pakketten beheren om pakketten te installeren

  • Klik met de rechtermuisknop op het project in Solution Explorer>NuGet-pakketten beheren.
  • Selecteer het tabblad Bladeren.
  • Voer Grpc.Net.Client- in het zoekvak in.
  • Selecteer het pakket Grpc.Net.Client op het tabblad Bladeren en selecteer Installeren.
  • Herhaal dit voor Google.Protobuf en Grpc.Tools.

Voeg greet.proto toe

  • Maak een Protos- map in het gRPC-clientproject.

  • Kopieer het bestand Protos\greet.proto van de gRPC Greeter-service naar de map Protos in het gRPC-clientproject.

  • Werk de naamruimte in het greet.proto-bestand bij naar de naamruimte van het project:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Bewerk het GrpcGreeterClient.csproj projectbestand:

Klik met de rechtermuisknop op het project en selecteer Projectbestand bewerken.

  • Voeg een itemgroep toe met een <Protobuf>-element dat verwijst naar het bestand greet.proto:

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

De Greeter-client maken

  • Bouw het clientproject om de typen in de GrpcGreeterClient naamruimte te maken.

Notitie

De GrpcGreeterClient typen worden automatisch gegenereerd door het buildproces. Het hulpprogrammapakket Grpc.Tools genereert de volgende bestanden op basis van het bestand greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: de protocolbuffercode die de aanvraag- en antwoordberichttypen vult, serialiseert en ophaalt.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: bevat de gegenereerde clientklassen.

Voor meer informatie over de C#-assets die automatisch worden gegenereerd door Grpc.Tools, zie gRPC-services met C#: Gegenereerde C#-assets.

  • Werk het gRPC-clientbestand Program.cs bij met de volgende code.

    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();
    
  • Vervang in de voorgaande gemarkeerde code het localhost-poortnummer 7042 door het HTTPS poortnummer dat is opgegeven in Properties/launchSettings.json binnen het GrpcGreeter-serviceproject.

Program.cs bevat het toegangspunt en de logica voor de gRPC-client.

De Greeter-client wordt gemaakt door:

  • Instantieer een GrpcChannel met de informatie voor het maken van de verbinding met de gRPC-dienst.
  • De GrpcChannel gebruiken om de Greeter-client te maken:
// 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();

De Greeter-client roept de asynchrone SayHello methode aan. Het resultaat van de SayHello-aanroep wordt weergegeven:

// 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();

De gRPC-client testen met de gRPC Greeter-service

Werk het appsettings.Development.json bestand bij door de volgende gemarkeerde regels toe te voegen:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • Druk in het GrpcGreeter serviceproject op Ctrl+F5 om de server te starten zonder het foutopsporingsprogramma.
  • Druk in het GrpcGreeterClient consoleproject op Ctrl+F5 om de client te starten zonder het foutopsporingsprogramma.

De client stuurt een begroeting naar de service met een bericht met de naam, GreeterClient. De service verzendt het bericht Hello GreeterClient als antwoord. Het antwoord 'Hello GreeterClient' wordt weergegeven in de opdrachtprompt:

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

De gRPC-service registreert de details van de geslaagde aanroep in de logboeken die naar de opdrachtprompt zijn geschreven:

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 HTTP/2 POST https://localhost:7042/greet.Greeter/SayHello - 200 - application/grpc 40.4615ms

Notitie

Voor de code in dit artikel is het ASP.NET Core HTTPS-ontwikkelingscertificaat vereist om de gRPC-service te beveiligen. Als de .NET gRPC-client mislukt met het bericht The remote certificate is invalid according to the validation procedure. of The SSL connection could not be established., wordt het ontwikkelingscertificaat niet vertrouwd. Zie Een gRPC-service aanroepen met een niet-vertrouwd/ongeldig certificaatom dit probleem op te lossen.

Volgende stappen

Deze zelfstudie laat zien hoe u een .NET Core-gRPC--client en een ASP.NET Core gRPC-server maakt. Aan het einde hebt u een gRPC-client die communiceert met de gRPC Greeter-service.

In deze zelfstudie gaat u het volgende doen:

  • Maak een gRPC-server.
  • Maak een gRPC-client.
  • Test de gRPC-client met de gRPC Greeter-service.

Voorwaarden

Een gRPC-service maken

  • Start Visual Studio 2022 en selecteer Nieuw project.
  • In het dialoogvenster Een nieuw project maken, zoek naar gRPC. Selecteer ASP.NET Core gRPC Service en selecteer Volgende.
  • Voer in het dialoogvenster Uw nieuwe project configurerenGrpcGreeter in voor Projectnaam. Het is belangrijk om het project een naam te geven GrpcGreeter zodat de naamruimten overeenkomen wanneer u code kopieert en plakt.
  • Selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie de optie .NET 8.0 (Long Term Support) en selecteer vervolgens Maken.

De service uitvoeren

  • Druk op Ctrl+F5 om uit te voeren zonder het foutopsporingsprogramma.

    Visual Studio geeft het volgende dialoogvenster weer wanneer een project nog niet is geconfigureerd voor het gebruik van SSL:

    Dit project is geconfigureerd voor het gebruik van SSL. Als u SSL-waarschuwingen in de browser wilt voorkomen, kunt u ervoor kiezen om het zelfondertekende certificaat te vertrouwen dat IIS Express heeft gegenereerd. Wilt u het IIS Express SSL-certificaat vertrouwen?

    Selecteer Ja als u het IIS Express SSL-certificaat vertrouwt.

    Het volgende dialoogvenster wordt weergegeven:

    beveiligingswaarschuwingsdialoogvenster

    Selecteer Ja als u akkoord gaat met het vertrouwen van het ontwikkelingscertificaat.

    Zie Firefox SEC_ERROR_INADEQUATE_KEY_USAGE certificaatfoutvoor meer informatie over het vertrouwen van de Firefox-browser.

    Visual Studio:

    • Start de Kestrel server.
    • Hiermee wordt een browser gestart.
    • Hiermee navigeert u naar http://localhost:port, bijvoorbeeld http://localhost:7042.
      • poort: een willekeurig toegewezen poortnummer voor de app.
      • localhost: de standaardhostnaam voor de lokale computer. Localhost dient alleen webaanvragen van de lokale computer.

In de logboeken wordt de service weergegeven die luistert op https://localhost:<port>, waarbij <port> het localhost-poortnummer is dat willekeurig is toegewezen wanneer het project wordt gemaakt en ingesteld in 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

Notitie

De gRPC-sjabloon is geconfigureerd voor het gebruik van TLS-(Transport Layer Security). gRPC-clients moeten HTTPS gebruiken om de server aan te roepen. Het localhostpoortnummer van de gRPC-service wordt willekeurig toegewezen wanneer het project wordt gemaakt en ingesteld in de Eigenschappen\launchSettings.jsop bestand van het gRPC-serviceproject.

De projectbestanden onderzoeken

GrpcGreeter projectbestanden :

  • Protos/greet.proto: definieert de Greeter gRPC en wordt gebruikt om de gRPC-serverassets te genereren. Zie Inleiding tot gRPC-voor meer informatie.
  • Services map: Bevat de implementatie van de Greeter-service.
  • appSettings.json: bevat configuratiegegevens zoals het protocol dat door Kestrelwordt gebruikt. Zie Configuratie in ASP.NET Corevoor meer informatie.
  • Program.cs, die het volgende bevat:

De gRPC-client maken in een .NET-console-app

  • Open een tweede exemplaar van Visual Studio en selecteer Nieuw project.
  • Selecteer in het dialoogvenster Een nieuw project makenConsole-appen selecteer Volgende.
  • Voer in het tekstvak ProjectnaamGrpcGreeterClient in en selecteer Volgende.
  • Kies in het dialoogvenster Aanvullende informatie.NET 8.0 (Langdurige Ondersteuning) en kies vervolgens Maken.

Vereiste NuGet-pakketten toevoegen

Voor het gRPC-clientproject zijn de volgende NuGet-pakketten vereist:

  • Grpc.Net.Client, die de .NET Core-client bevat.
  • Google.Protobuf, die protobuf-bericht-API's voor C# bevat.
  • Grpc.Tools, die C#-toolingondersteuning voor protobuf-bestanden bevatten. Het hulpprogrammapakket is niet vereist tijdens runtime, dus de afhankelijkheid wordt gemarkeerd met PrivateAssets="All".

Installeer de pakketten met behulp van de Package Manager Console (PMC) of NuGet-pakketten beheren.

PMC-optie voor het installeren van pakketten

  • Kies in Visual Studio Hulpmiddelen>NuGet Package Manager>Package Manager Console

  • Voer in het Venster Package Manager Consolecd GrpcGreeterClient uit om mappen te wijzigen in de map met de GrpcGreeterClient.csproj-bestanden.

  • Voer de volgende opdrachten uit:

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

Optie NuGet-pakketten beheren om pakketten te installeren

  • Klik met de rechtermuisknop op het project in Solution Explorer>NuGet-pakketten beheren.
  • Selecteer het tabblad Bladeren.
  • Voer Grpc.Net.Client- in het zoekvak in.
  • Selecteer het Grpc.Net.Client-pakket op het tabblad Bladeren en kies Installeren.
  • Herhaal dit voor Google.Protobuf en Grpc.Tools.

Voeg greet.proto toe

  • Maak een Protos- map in het gRPC-clientproject.

  • Kopieer het bestand Protos\greet.proto van de gRPC Greeter-service naar de map Protos in het gRPC-clientproject.

  • Werk de naamruimte in het greet.proto-bestand bij naar de naamruimte van het project:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Bewerk het GrpcGreeterClient.csproj projectbestand:

Klik met de rechtermuisknop op het project en selecteer Projectbestand bewerken.

  • Voeg een itemgroep toe met een <Protobuf>-element dat verwijst naar het bestand greet.proto:

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

De Greeter-client maken

  • Bouw het clientproject om de typen in de GrpcGreeterClient naamruimte te maken.

Notitie

De GrpcGreeterClient typen worden automatisch gegenereerd door het buildproces. Het hulpprogrammapakket Grpc.Tools genereert de volgende bestanden op basis van het bestand greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: de protocolbuffercode die de aanvraag- en antwoordberichttypen vult, serialiseert en ophaalt.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: bevat de gegenereerde clientklassen.

Zie voor meer informatie over de C#-assets die automatisch worden gegenereerd door Grpc.Tools, gRPC-services met C#: Gegenereerde C#-assets.

  • Werk het gRPC-clientbestand Program.cs bij met de volgende code.

    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();
    
  • Vervang in de voorgaande gemarkeerde code het localhost-poortnummer 7042 door het HTTPS poortnummer dat is opgegeven in Properties/launchSettings.json binnen het GrpcGreeter-serviceproject.

Program.cs bevat het toegangspunt en de logica voor de gRPC-client.

De Greeter-client wordt gemaakt door:

  • Instantieer een GrpcChannel met de informatie voor het maken van de verbinding met de gRPC-service.
  • De GrpcChannel gebruiken om de Greeter-client te maken:
// 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();

De Greeter-client roept de asynchrone SayHello methode aan. Het resultaat van de SayHello-aanroep wordt weergegeven:

// 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();

De gRPC-client testen met de gRPC Greeter-service

Werk het appsettings.Development.json bestand bij door de volgende gemarkeerde regels toe te voegen:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • Druk in de Greeter-service op Ctrl+F5 om de server te starten zonder het foutopsporingsprogramma.
  • Druk in het GrpcGreeterClient project op Ctrl+F5 om de client te starten zonder het foutopsporingsprogramma.

De client stuurt een begroeting naar de service met een bericht met de naam, GreeterClient. De service verzendt het bericht Hello GreeterClient als antwoord. Het antwoord 'Hello GreeterClient' wordt weergegeven in de opdrachtprompt:

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

De gRPC-service registreert de details van de geslaagde aanroep in de logboeken die naar de opdrachtprompt zijn geschreven:

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

Notitie

Voor de code in dit artikel is het ASP.NET Core HTTPS-ontwikkelingscertificaat vereist om de gRPC-service te beveiligen. Als de .NET gRPC-client mislukt met het bericht The remote certificate is invalid according to the validation procedure. of The SSL connection could not be established., wordt het ontwikkelingscertificaat niet vertrouwd. Zie Een gRPC-service aanroepen met een niet-vertrouwd/ongeldig certificaatom dit probleem op te lossen.

Volgende stappen

Deze zelfstudie laat zien hoe u een .NET Core-gRPC--client en een ASP.NET Core gRPC-server maakt. Aan het einde hebt u een gRPC-client die communiceert met de gRPC Greeter-service.

In deze zelfstudie gaat u het volgende doen:

  • Maak een gRPC-server.
  • Maak een gRPC-client.
  • Test de gRPC-client met de gRPC Greeter-service.

Voorwaarden

Een gRPC-service maken

  • Start Visual Studio 2022 en selecteer Een nieuw project maken.
  • Zoek in het dialoogvenster Een nieuw project maken naar gRPC. Selecteer ASP.NET Core gRPC Service en selecteer Volgende.
  • In het dialoogvenster Configure your new project voer GrpcGreeter in voor Project name. Het is belangrijk om het project een naam te geven GrpcGreeter zodat de naamruimten overeenkomen wanneer u code kopieert en plakt.
  • Selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie de optie .NET 6.0 (Long-term support) en selecteer vervolgens Maken.

De service uitvoeren

  • Druk op Ctrl+F5 om uit te voeren zonder het foutopsporingsprogramma.

    Visual Studio geeft het volgende dialoogvenster weer wanneer een project nog niet is geconfigureerd voor het gebruik van SSL:

    Dit project is geconfigureerd voor het gebruik van SSL. Als u SSL-waarschuwingen in de browser wilt voorkomen, kunt u ervoor kiezen om het zelfondertekende certificaat te vertrouwen dat IIS Express heeft gegenereerd. Wilt u het IIS Express SSL-certificaat vertrouwen?

    Selecteer Ja als u het IIS Express SSL-certificaat vertrouwt.

    Het volgende dialoogvenster wordt weergegeven:

    beveiligingswaarschuwingsdialoogvenster

    Selecteer Ja als u akkoord gaat met het vertrouwen van het ontwikkelingscertificaat.

    Zie Firefox SEC_ERROR_INADEQUATE_KEY_USAGE certificaatfoutvoor meer informatie over het vertrouwen van de Firefox-browser.

    Visual Studio:

    • Starten Kestrel server.
    • Hiermee wordt een browser gestart.
    • Hiermee navigeert u naar http://localhost:port, bijvoorbeeld http://localhost:7042.
      • poort: een willekeurig toegewezen poortnummer voor de app.
      • localhost: de standaardhostnaam voor de lokale computer. Localhost dient alleen webaanvragen van de lokale computer.

In de logboeken wordt de service weergegeven die luistert op https://localhost:<port>, waarbij <port> het localhost-poortnummer is dat willekeurig is toegewezen wanneer het project wordt gemaakt en ingesteld in 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

Notitie

De gRPC-sjabloon is geconfigureerd voor het gebruik van TLS-(Transport Layer Security). gRPC-clients moeten HTTPS gebruiken om de server aan te roepen. Het localhostpoortnummer van de gRPC-service wordt willekeurig toegewezen wanneer het project wordt gemaakt en ingesteld in de Eigenschappen\launchSettings.jsop bestand van het gRPC-serviceproject.

macOS biedt geen ondersteuning voor ASP.NET Core gRPC met TLS. Aanvullende configuratie is vereist voor het uitvoeren van gRPC-services op macOS. Zie Kan ASP.NET Core gRPC-app niet starten op macOS-voor meer informatie.

De projectbestanden onderzoeken

GrpcGreeter projectbestanden:

  • Protos/greet.proto: definieert de Greeter gRPC en wordt gebruikt om de gRPC-serverassets te genereren. Zie Inleiding tot gRPC-voor meer informatie.
  • Services map: Bevat de implementatie van de Greeter-service.
  • appSettings.json: bevat configuratiegegevens zoals het protocol dat door Kestrelwordt gebruikt. Zie Configuratie in ASP.NET Corevoor meer informatie.
  • Program.cs, die het volgende bevat:

De gRPC-client maken in een .NET-console-app

  • Open een tweede exemplaar van Visual Studio en selecteer Een nieuw project maken.
  • Selecteer in het dialoogvenster Een nieuw project makenConsoletoepassingen selecteer Volgende.
  • Voer in het tekstvak ProjectnaamGrpcGreeterClient in en selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie.NET 6.0 (langdurige ondersteuning) en selecteer vervolgens Maak.

Vereiste NuGet-pakketten toevoegen

Voor het gRPC-clientproject zijn de volgende NuGet-pakketten vereist:

  • Grpc.Net.Client, die de .NET Core-client bevat.
  • Google.Protobuf, die protobuf-bericht-API's voor C# bevat.
  • Grpc.Tools, die C#-toolingondersteuning voor protobuf-bestanden bevatten. Het hulpprogrammapakket is niet vereist tijdens runtime, dus de afhankelijkheid wordt gemarkeerd met PrivateAssets="All".

Installeer de pakketten met behulp van de Package Manager Console (PMC) of NuGet-pakketten beheren.

PMC-optie voor het installeren van pakketten

  • Selecteer in Visual Studio Tools>NuGet Package Manager>Package Manager Console

  • Voer in het -venster Package Manager Consolecd GrpcGreeterClient uit om de directory te wijzigen naar de map met de GrpcGreeterClient.csproj-bestanden.

  • Voer de volgende opdrachten uit:

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

Optie NuGet-pakketten beheren om pakketten te installeren

  • Klik met de rechtermuisknop op het project in Solution Explorer>NuGet-pakketten beheren.
  • Selecteer het tabblad Bladeren.
  • Voer Grpc.Net.Client- in het zoekvak in.
  • Selecteer het pakket Grpc.Net.Client op het tabblad Bladeren en selecteer Installeren.
  • Herhaal dit voor Google.Protobuf en Grpc.Tools.

Voeg greet.proto toe

  • Maak een Protos- map in het gRPC-clientproject.

  • Kopieer het bestand Protos\greet.proto van de gRPC Greeter-service naar de map Protos in het gRPC-clientproject.

  • Werk de naamruimte in het greet.proto-bestand bij naar de naamruimte van het project:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Bewerk het GrpcGreeterClient.csproj projectbestand:

Klik met de rechtermuisknop op het project en selecteer Projectbestand bewerken.

  • Voeg een itemgroep toe met een <Protobuf>-element dat verwijst naar het bestand greet.proto:

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

De Greeter-client maken

  • Bouw het clientproject om de typen in de GrpcGreeterClient naamruimte te maken.

Notitie

De GrpcGreeterClient typen worden automatisch gegenereerd door het buildproces. Het hulpprogrammapakket Grpc.Tools genereert de volgende bestanden op basis van het bestand greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: de protocolbuffercode die de aanvraag- en antwoordberichttypen vult, serialiseert en ophaalt.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: bevat de gegenereerde clientklassen.

Voor meer informatie over de C#-assets die automatisch worden gegenereerd door Grpc.Tools, zie gRPC-services met C#: Gegenereerde C#-assets.

  • Werk het gRPC-clientbestand Program.cs bij met de volgende code.

    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();
    
  • Vervang in de voorgaande gemarkeerde code het localhost-poortnummer 7042 door het HTTPS poortnummer dat is opgegeven in Properties/launchSettings.json binnen het GrpcGreeter-serviceproject.

Program.cs bevat het toegangspunt en de logica voor de gRPC-client.

De Greeter-client wordt gemaakt door:

  • Instantieer een GrpcChannel met de informatie voor het maken van de verbinding met de gRPC-service.
  • De GrpcChannel gebruiken om de Greeter-client te maken:
// 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();

De Greeter-client roept de asynchrone SayHello methode aan. Het resultaat van de SayHello-aanroep wordt weergegeven:

// 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();

De gRPC-client testen met de gRPC Greeter-service

Werk het appsettings.Development.json bestand bij door de volgende gemarkeerde regels toe te voegen:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • Druk in de Greeter-service op Ctrl+F5 om de server te starten zonder het foutopsporingsprogramma.
  • Druk in het GrpcGreeterClient project op Ctrl+F5 om de client te starten zonder het foutopsporingsprogramma.

De client stuurt een begroeting naar de service met een bericht met de naam, GreeterClient. De service verzendt het bericht Hello GreeterClient als antwoord. Het antwoord 'Hello GreeterClient' wordt weergegeven in de opdrachtprompt:

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

De gRPC-service registreert de details van de geslaagde aanroep in de logboeken die naar de opdrachtprompt zijn geschreven:

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

Notitie

Voor de code in dit artikel is het ASP.NET Core HTTPS-ontwikkelingscertificaat vereist om de gRPC-service te beveiligen. Als de .NET gRPC-client mislukt met het bericht The remote certificate is invalid according to the validation procedure. of The SSL connection could not be established., wordt het ontwikkelingscertificaat niet vertrouwd. Zie Een gRPC-service aanroepen met een niet-vertrouwd/ongeldig certificaatom dit probleem op te lossen.

Volgende stappen

Deze zelfstudie laat zien hoe u een .NET Core-gRPC--client en een ASP.NET Core gRPC-server maakt. Aan het einde hebt u een gRPC-client die communiceert met de gRPC Greeter-service.

In deze zelfstudie gaat u het volgende doen:

  • Maak een gRPC-server.
  • Maak een gRPC-client.
  • Test de gRPC-client met de gRPC-groetendienst.

Voorwaarden

Een gRPC-service maken

  • Start Visual Studio 2022 en selecteer Een nieuw project maken.
  • In het dialoogvenster Een nieuw project maken, zoek naar gRPC. Selecteer ASP.NET Core gRPC Service en selecteer Volgende.
  • Voer in het dialoogvenster Uw nieuwe project configurerenGrpcGreeter in voor projectnaam. Het is belangrijk om het project een naam te geven GrpcGreeter zodat de naamruimten overeenkomen wanneer u code kopieert en plakt.
  • Selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie.NET 6.0 (Long-term support) en selecteer vervolgens Maken.

De service uitvoeren

  • Druk op Ctrl+F5 om uit te voeren zonder het foutopsporingsprogramma.

    Visual Studio geeft het volgende dialoogvenster weer wanneer een project nog niet is geconfigureerd voor het gebruik van SSL:

    Dit project is geconfigureerd voor het gebruik van SSL. Als u SSL-waarschuwingen in de browser wilt voorkomen, kunt u ervoor kiezen om het zelfondertekende certificaat te vertrouwen dat IIS Express heeft gegenereerd. Wilt u het IIS Express SSL-certificaat vertrouwen?

    Selecteer Ja als u het IIS Express SSL-certificaat vertrouwt.

    Het volgende dialoogvenster wordt weergegeven:

    beveiligingswaarschuwingsdialoogvenster

    Selecteer Ja als u akkoord gaat met het vertrouwen van het ontwikkelingscertificaat.

    Zie Firefox SEC_ERROR_INADEQUATE_KEY_USAGE certificaatfoutvoor meer informatie over het vertrouwen van de Firefox-browser.

    Visual Studio:

    • Start de Kestrel server.
    • Hiermee wordt een browser gestart.
    • Hiermee navigeert u naar http://localhost:port, bijvoorbeeld naar http://localhost:7042.
      • poort: een willekeurig toegewezen poortnummer voor de app.
      • localhost: de standaardhostnaam voor de lokale computer. Localhost dient alleen webaanvragen van de lokale computer.

In de logboeken wordt weergegeven dat de service luistert op https://localhost:<port>, waarbij <port> het localhost-poortnummer is dat willekeurig wordt toegewezen wanneer het project wordt gemaakt en ingesteld op 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

Notitie

De gRPC-sjabloon is geconfigureerd voor het gebruik van TLS-(Transport Layer Security). gRPC-clients moeten HTTPS gebruiken om de server aan te roepen. Het localhostpoortnummer van de gRPC-service wordt willekeurig toegewezen wanneer het project wordt gemaakt en ingesteld in de Eigenschappen\launchSettings.jsop bestand van het gRPC-serviceproject.

macOS biedt geen ondersteuning voor ASP.NET Core gRPC met TLS. Aanvullende configuratie is vereist voor het uitvoeren van gRPC-services op macOS. Zie Kan ASP.NET Core gRPC-app niet starten op macOS-voor meer informatie.

De projectbestanden onderzoeken

GrpcGreeter projectbestanden:

  • Protos/greet.proto: definieert de Greeter gRPC en wordt gebruikt om de gRPC-serverassets te genereren. Zie Inleiding tot gRPC-voor meer informatie.
  • Services map: Bevat de implementatie van de Greeter-service.
  • appSettings.json: bevat configuratiegegevens zoals het protocol dat door Kestrelwordt gebruikt. Zie Configuratie in ASP.NET Corevoor meer informatie.
  • Program.cs, die het volgende bevat:

De gRPC-client maken in een .NET-console-app

  • Open een tweede exemplaar van Visual Studio en selecteer Een nieuw project maken.
  • Selecteer in het dialoogvenster 'Een nieuw project maken' de optie 'Consoletoepassing'en klik op 'Volgende'.
  • Voer in het tekstvak ProjectnaamGrpcGreeterClient in en selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie.NET 6.0 (langdurige ondersteuning) en selecteer vervolgens Maken.

Vereiste NuGet-pakketten toevoegen

Voor het gRPC-clientproject zijn de volgende NuGet-pakketten vereist:

  • Grpc.Net.Client, die de .NET Core-client bevat.
  • Google.Protobuf, die protobuf-bericht-API's voor C# bevat.
  • Grpc.Tools, die C#-toolingondersteuning voor protobuf-bestanden bevatten. Het hulpprogrammapakket is niet vereist tijdens runtime, dus de afhankelijkheid wordt gemarkeerd met PrivateAssets="All".

Installeer de pakketten met behulp van de Package Manager Console (PMC) of NuGet-pakketten beheren.

PMC-optie voor het installeren van pakketten

  • Selecteer in Visual Studio Hulpmiddelen>NuGet Package Manager>Package Manager Console

  • Voer in het Venster Package Manager Consolecd GrpcGreeterClient uit om mappen te wijzigen in de map met de GrpcGreeterClient.csproj-bestanden.

  • Voer de volgende opdrachten uit:

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

Optie NuGet-pakketten beheren om pakketten te installeren

  • Klik met de rechtermuisknop op het project in Solution Explorer>NuGet-pakketten beheren.
  • Selecteer het tabblad Bladeren.
  • Voer Grpc.Net.Client- in het zoekvak in.
  • Selecteer het pakket Grpc.Net.Client op het tabblad Bladeren en selecteer Installeren.
  • Herhaal dit voor Google.Protobuf en Grpc.Tools.

Voeg greet.proto toe

  • Maak een Protos- map in het gRPC-clientproject.

  • Kopieer het bestand Protos\greet.proto van de gRPC Greeter-service naar de map Protos in het gRPC-clientproject.

  • Werk de naamruimte in het greet.proto-bestand bij naar de naamruimte van het project:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Bewerk het GrpcGreeterClient.csproj projectbestand:

Klik met de rechtermuisknop op het project en selecteer Projectbestand bewerken.

  • Voeg een itemgroep toe met een <Protobuf>-element dat verwijst naar het bestand greet.proto:

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

De Greeter-client maken

  • Bouw het clientproject om de typen in de GrpcGreeterClient naamruimte te maken.

Notitie

De GrpcGreeterClient typen worden automatisch gegenereerd door het buildproces. Het hulpprogrammapakket Grpc.Tools genereert de volgende bestanden op basis van het bestand greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: de protocolbuffercode die de aanvraag- en antwoordberichttypen vult, serialiseert en ophaalt.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: bevat de gegenereerde clientklassen.

Voor meer informatie over de C#-assets die automatisch worden gegenereerd door Grpc.Tools, zie gRPC-services met C#: Gegenereerde C#-assets.

  • Werk het gRPC-clientbestand Program.cs bij met de volgende code.

    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();
    
  • Vervang in de voorgaande gemarkeerde code het localhost-poortnummer 7042 door het HTTPS poortnummer dat is opgegeven in Properties/launchSettings.json binnen het GrpcGreeter-serviceproject.

Program.cs bevat het toegangspunt en de logica voor de gRPC-client.

De Greeter-client wordt gemaakt door:

  • Een GrpcChannel instantiëren die de informatie bevat voor het creëren van de verbinding met de gRPC-service.
  • De GrpcChannel gebruiken om de Greeter-client te maken:
// 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();

De Greeter-client roept de asynchrone SayHello methode aan. Het resultaat van de SayHello-aanroep wordt weergegeven:

// 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();

De gRPC-client testen met de gRPC Greeter-service

  • Druk in de Greeter-service op Ctrl+F5 om de server te starten zonder het foutopsporingsprogramma.
  • Druk in het GrpcGreeterClient project op Ctrl+F5 om de client te starten zonder het foutopsporingsprogramma.

De client stuurt een begroeting naar de service met een bericht met de naam, GreeterClient. De service verzendt het bericht Hello GreeterClient als antwoord. Het antwoord 'Hello GreeterClient' wordt weergegeven in de opdrachtprompt:

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

De gRPC-service registreert de details van de geslaagde aanroep in de logboeken die naar de opdrachtprompt zijn geschreven:

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

Werk het appsettings.Development.json-bestand bij door de volgende regels toe te voegen:

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

Notitie

Voor de code in dit artikel is het ASP.NET Core HTTPS-ontwikkelingscertificaat vereist om de gRPC-service te beveiligen. Als de .NET gRPC-client mislukt met het bericht The remote certificate is invalid according to the validation procedure. of The SSL connection could not be established., wordt het ontwikkelingscertificaat niet vertrouwd. Zie Een gRPC-service aanroepen met een niet-vertrouwd/ongeldig certificaatom dit probleem op te lossen.

Volgende stappen

Deze zelfstudie laat zien hoe u een .NET Core-gRPC--client en een ASP.NET Core gRPC-server maakt.

Aan het einde hebt u een gRPC-client die communiceert met de gRPC Greeter-service.

Voorbeeldcode bekijken of downloaden (hoe u kunt downloaden).

In deze zelfstudie gaat u het volgende doen:

  • Maak een gRPC-server.
  • Maak een gRPC-client.
  • Test de gRPC-client met de gRPC Greeter-service.

Voorwaarden

Een gRPC-service maken

  • Start Visual Studio en selecteer Een nieuw project maken.
  • Selecteer in het dialoogvenster Een nieuw project makengRPC-service en selecteer Volgende.
  • Voer in het dialoogvenster uw nieuwe project configurerenGrpcGreeter voor projectnaamin. Het is belangrijk om het project een naam te geven GrpcGreeter zodat de naamruimten overeenkomen wanneer u code kopieert en plakt.
  • Selecteer Volgende.
  • Selecteer in het dialoogvenster Aanvullende informatie.NET 5.0 in de vervolgkeuzelijst Target Framework.
  • Selecteer maken.

De service uitvoeren

  • Druk op Ctrl+F5 om uit te voeren zonder het foutopsporingsprogramma.

    Visual Studio geeft het volgende dialoogvenster weer wanneer een project nog niet is geconfigureerd voor het gebruik van SSL:

    Dit project is geconfigureerd voor het gebruik van SSL. Als u SSL-waarschuwingen in de browser wilt voorkomen, kunt u ervoor kiezen om het zelfondertekende certificaat te vertrouwen dat IIS Express heeft gegenereerd. Wilt u het IIS Express SSL-certificaat vertrouwen?

    Selecteer Ja als u het IIS Express SSL-certificaat vertrouwt.

    Het volgende dialoogvenster wordt weergegeven:

    beveiligingswaarschuwingsdialoogvenster

    Selecteer Ja als u akkoord gaat met het vertrouwen van het ontwikkelingscertificaat.

    Zie Firefox SEC_ERROR_INADEQUATE_KEY_USAGE certificaatfoutvoor meer informatie over het vertrouwen van de Firefox-browser.

    Visual Studio startt IIS Express en voert de app uit. De adresbalk toont localhost:port# en niet iets als example.com. Dat komt doordat localhost de standaardhostnaam is voor de lokale computer. Localhost dient alleen webaanvragen van de lokale computer. Wanneer Visual Studio een webproject maakt, wordt er een willekeurige poort gebruikt voor de webserver.

De logboeken tonen dat de service luistert op 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

Notitie

De gRPC-sjabloon is geconfigureerd voor het gebruik van TLS-(Transport Layer Security). gRPC-clients moeten HTTPS gebruiken om de server aan te roepen.

macOS biedt geen ondersteuning voor ASP.NET Core gRPC met TLS. Aanvullende configuratie is vereist voor het uitvoeren van gRPC-services op macOS. Zie Kan ASP.NET Core gRPC-app niet starten op macOS-voor meer informatie.

De projectbestanden onderzoeken

GrpcGreeter projectbestanden:

  • greet.proto: Het bestand Protos/greet.proto definieert de Greeter gRPC en wordt gebruikt om de gRPC-serverassets te genereren. Zie Inleiding tot gRPC-voor meer informatie.
  • Services map: Bevat de implementatie van de Greeter-service.
  • appsettings.json: bevat configuratiegegevens, zoals het protocol dat wordt gebruikt door Kestrel. Zie Configuratie in ASP.NET Corevoor meer informatie.
  • Program.cs: bevat het toegangspunt voor de gRPC-service. Zie .NET Generic Host in ASP.NET Corevoor meer informatie.
  • Startup.cs: bevat code waarmee app-gedrag wordt geconfigureerd. Zie App-opstartvoor meer informatie.

De gRPC-client maken in een .NET-console-app

  • Open een tweede exemplaar van Visual Studio en selecteer Een nieuw project maken.
  • In het dialoogvenster Een nieuw project maken, selecteer Console-app (.NET Core) en selecteer Volgende.
  • Voer in het tekstvak ProjectnaamGrpcGreeterClient in en selecteer Maken.

Vereiste pakketten toevoegen

Voor het gRPC-clientproject zijn de volgende pakketten vereist:

  • Grpc.Net.Client, die de .NET Core-client bevat.
  • Google.Protobuf, die protobuf-bericht-API's voor C# bevat.
  • Grpc.Tools, die C#-toolingondersteuning voor protobuf-bestanden bevat. Het hulpprogrammapakket is niet vereist tijdens runtime, dus de afhankelijkheid wordt gemarkeerd met PrivateAssets="All".

Installeer de pakketten met behulp van de Package Manager Console (PMC) of NuGet-pakketten beheren.

PMC-optie voor het installeren van pakketten

  • Kies in Visual Studio Tools>NuGet Package Manager>Package Manager Console

  • Voer in het Venster Package Manager Consolecd GrpcGreeterClient uit om mappen te wijzigen in de map met de GrpcGreeterClient.csproj-bestanden.

  • Voer de volgende opdrachten uit:

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

Optie NuGet-pakketten beheren om pakketten te installeren

  • Klik met de rechtermuisknop op het project in Solution Explorer>NuGet-pakketten beheren.
  • Selecteer het tabblad Bladeren.
  • Voer Grpc.Net.Client- in het zoekvak in.
  • Selecteer het pakket Grpc.Net.Client op het tabblad Bladeren en selecteer Installeren.
  • Herhaal dit voor Google.Protobuf en Grpc.Tools.

Voeg greet.proto toe

  • Maak een Protos- map in het gRPC-clientproject.

  • Kopieer het bestand Protos\greet.proto van de gRPC Greeter-service naar de map Protos in het gRPC-clientproject.

  • Werk de naamruimte in het greet.proto-bestand bij naar de naamruimte van het project:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Bewerk het GrpcGreeterClient.csproj projectbestand:

    Klik met de rechtermuisknop op het project en selecteer Projectbestand bewerken.


  • Voeg een itemgroep toe met een <Protobuf>-element dat verwijst naar het bestand greet.proto:

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

De Greeter-client maken

  • Bouw het clientproject om de typen in de GrpcGreeterClient naamruimte te maken.

Notitie

De GrpcGreeterClient typen worden automatisch gegenereerd door het buildproces. Het hulpprogrammapakket Grpc.Tools genereert de volgende bestanden op basis van het bestand greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: de protocolbuffercode die de aanvraag- en antwoordberichttypen vult, serialiseert en ophaalt.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: bevat de gegenereerde clientklassen.

Voor meer informatie over de C#-assets die automatisch worden gegenereerd door Grpc.Tools, zie gRPC-services met C#: Gegenereerde C#-assets.

  • Werk het Program.cs-bestand van de gRPC-client bij met de volgende code:

    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 bevat het toegangspunt en de logica voor de gRPC-client.

De Greeter-client wordt gemaakt door:

  • Een GrpcChannel instantiëren met de informatie om de verbinding met de gRPC-service tot stand te brengen.
  • De GrpcChannel gebruiken om de Greeter-client te maken:
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();
}

De Greeter-client roept de asynchrone SayHello methode aan. Het resultaat van de SayHello-aanroep wordt weergegeven:

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();
}

De gRPC-client testen met de gRPC Greeter-service

  • Druk in de Greeter-service op Ctrl+F5 om de server te starten zonder het foutopsporingsprogramma.
  • Druk in het GrpcGreeterClient project op Ctrl+F5 om de client te starten zonder het foutopsporingsprogramma.

De client stuurt een begroeting naar de service met een bericht met de naam, GreeterClient. De service verzendt het bericht Hello GreeterClient als antwoord. Het antwoord 'Hello GreeterClient' wordt weergegeven in de opdrachtprompt:

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

De gRPC-service registreert de details van de geslaagde aanroep in de logboeken die naar de opdrachtprompt zijn geschreven:

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

Notitie

Voor de code in dit artikel is het ASP.NET Core HTTPS-ontwikkelingscertificaat vereist om de gRPC-service te beveiligen. Als de .NET gRPC-client mislukt met het bericht The remote certificate is invalid according to the validation procedure. of The SSL connection could not be established., wordt het ontwikkelingscertificaat niet vertrouwd. Zie Een gRPC-service aanroepen met een niet-vertrouwd/ongeldig certificaatom dit probleem op te lossen.

Volgende stappen

Deze zelfstudie laat zien hoe u een .NET Core-gRPC--client en een ASP.NET Core gRPC-server maakt.

Aan het einde hebt u een gRPC-client die communiceert met de gRPC Greeter-service.

voorbeeldcode bekijken of downloaden (hoe te downloaden).

In deze zelfstudie gaat u het volgende doen:

  • Maak een gRPC-server.
  • Maak een gRPC-client.
  • Test de gRPC-client met de gRPC Greeter-service.

Voorwaarden

Een gRPC-service maken

  • Start Visual Studio en selecteer Een nieuw project maken. U kunt ook in het menu Bestand Visual StudioNew>Projectselecteren.

  • Selecteer in het dialoogvenster Een nieuw project makengRPC Service en selecteer Volgende:

    Dialoogvenster Een nieuw project maken in Visual Studio

  • Geef het project de naam GrpcGreeter. Het is belangrijk om het project een naam te geven GrpcGreeter zodat de naamruimten overeenkomen wanneer u code kopieert en plakt.

  • Selecteer Maak.

  • In het dialoogvenster Een nieuwe gRPC-service maken:

    • De gRPC-service sjabloon is geselecteerd.
    • Selecteer Maak.

De service uitvoeren

  • Druk op Ctrl+F5 om uit te voeren zonder het foutopsporingsprogramma.

    Visual Studio geeft het volgende dialoogvenster weer wanneer een project nog niet is geconfigureerd voor het gebruik van SSL:

    Dit project is geconfigureerd voor het gebruik van SSL. Als u SSL-waarschuwingen in de browser wilt voorkomen, kunt u ervoor kiezen om het zelfondertekende certificaat te vertrouwen dat IIS Express heeft gegenereerd. Wilt u het IIS Express SSL-certificaat vertrouwen?

    Selecteer Ja als u het IIS Express SSL-certificaat vertrouwt.

    Het volgende dialoogvenster wordt weergegeven:

    beveiligingswaarschuwingsdialoogvenster

    Selecteer Ja als u akkoord gaat met het vertrouwen van het ontwikkelingscertificaat.

    Zie Firefox SEC_ERROR_INADEQUATE_KEY_USAGE certificaatfoutvoor meer informatie over het vertrouwen van de Firefox-browser.

    Visual Studio start IIS Express en voert de app uit. De adresbalk toont localhost:port# en niet iets als example.com. Dat komt doordat localhost de standaardhostnaam is voor de lokale computer. Localhost dient alleen webaanvragen van de lokale computer. Wanneer Visual Studio een webproject maakt, wordt er een willekeurige poort gebruikt voor de webserver.

In de logboeken wordt de service weergegeven die luistert op 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

Notitie

De gRPC-sjabloon is geconfigureerd voor het gebruik van TLS-(Transport Layer Security). gRPC-clients moeten HTTPS gebruiken om de server aan te roepen.

macOS biedt geen ondersteuning voor ASP.NET Core gRPC met TLS. Aanvullende configuratie is vereist voor het uitvoeren van gRPC-services op macOS. Zie Kan ASP.NET Core gRPC-app niet starten op macOS-voor meer informatie.

De projectbestanden onderzoeken

GrpcGreeter project-bestanden:

  • greet.proto: Het bestand Protos/greet.proto definieert de Greeter gRPC en wordt gebruikt om de gRPC-serverassets te genereren. Zie Inleiding tot gRPC-voor meer informatie.
  • Services map: Bevat de implementatie van de Greeter-service.
  • appsettings.json: bevat configuratiegegevens, zoals het protocol dat wordt gebruikt door Kestrel. Zie Configuratie in ASP.NET Corevoor meer informatie.
  • Program.cs: bevat het toegangspunt voor de gRPC-service. Zie .NET Generic Host in ASP.NET Corevoor meer informatie.
  • Startup.cs: bevat code waarmee app-gedrag wordt geconfigureerd. Voor meer informatie, zie App-opstart.

De gRPC-client maken in een .NET-console-app

  • Open een tweede exemplaar van Visual Studio en selecteer Een nieuw project maken.
  • Selecteer in het dialoogvenster Een nieuw project maken, selecteer Console-app (.NET Core) en selecteer Volgende.
  • Voer in het tekstvak ProjectnaamGrpcGreeterClient in en selecteer maken.

Vereiste pakketten toevoegen

Voor het gRPC-clientproject zijn de volgende pakketten vereist:

  • Grpc.Net.Client, die de .NET Core-client bevat.
  • Google.Protobuf, die protobuf-bericht-API's voor C# bevat.
  • Grpc.Tools, die C#-toolingondersteuning voor protobuf-bestanden bevat. Het hulpprogrammapakket is niet vereist tijdens runtime, dus de afhankelijkheid wordt gemarkeerd met PrivateAssets="All".

Installeer de pakketten met behulp van de Package Manager Console (PMC) of NuGet-pakketten beheren.

PMC-optie voor het installeren van pakketten

  • Selecteer in Visual Studio Tools>NuGet Package Manager>Package Manager Console

  • Voer in het Venster Package Manager Consolecd GrpcGreeterClient uit om mappen te wijzigen in de map met de GrpcGreeterClient.csproj-bestanden.

  • Voer de volgende opdrachten uit:

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

Optie NuGet-pakketten beheren om pakketten te installeren

  • Klik met de rechtermuisknop op het project in Solution Explorer>NuGet-pakketten beheren.
  • Selecteer het tabblad Bladeren.
  • Voer Grpc.Net.Client- in het zoekvak in.
  • Selecteer het Grpc.Net.Client pakket in het Bladeren tabblad en kies voor Installeren.
  • Herhaal dit voor Google.Protobuf en Grpc.Tools.

Voeg greet.proto toe

  • Maak een Protos- map in het gRPC-clientproject.

  • Kopieer het bestand Protos\greet.proto van de gRPC Greeter-service naar de map Protos in het gRPC-clientproject.

  • Werk de naamruimte in het greet.proto-bestand bij naar de naamruimte van het project:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Bewerk het GrpcGreeterClient.csproj projectbestand:

    Klik met de rechtermuisknop op het project en selecteer Projectbestand bewerken.


  • Voeg een itemgroep toe met een <Protobuf>-element dat verwijst naar het bestand greet.proto:

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

De Greeter-client maken

  • Bouw het clientproject om de typen in de GrpcGreeterClient naamruimte te maken.

Notitie

De GrpcGreeterClient typen worden automatisch gegenereerd door het buildproces. Het hulpprogrammapakket Grpc.Tools genereert de volgende bestanden op basis van het bestand greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: de protocolbuffercode die de aanvraag- en antwoordberichttypen vult, serialiseert en ophaalt.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: bevat de gegenereerde clientklassen.

Voor meer informatie over de C#-assets die automatisch worden gegenereerd door Grpc.Tools, zie gRPC-services met C#: Gegenereerde C#-assets.

Werk het Program.cs-bestand van de gRPC-client bij met de volgende code:

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 bevat het toegangspunt en de logica voor de gRPC-client.

De Greeter-client wordt gemaakt door:

  • Instantieer een GrpcChannel met de informatie voor het maken van de verbinding met de gRPC-service.
  • De GrpcChannel gebruiken om de Greeter-client te maken:
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();
}

De Greeter-client roept de asynchrone SayHello methode aan. Het resultaat van de SayHello-aanroep wordt weergegeven:

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();
}

De gRPC-client testen met de gRPC Greeter-service

  • Druk in de Greeter-service op Ctrl+F5 om de server te starten zonder het foutopsporingsprogramma.
  • Druk in het GrpcGreeterClient project op Ctrl+F5 om de client te starten zonder het foutopsporingsprogramma.

De client stuurt een begroeting naar de service met een bericht met de naam, GreeterClient. De service verzendt het bericht Hello GreeterClient als antwoord. Het antwoord 'Hello GreeterClient' wordt weergegeven in de opdrachtprompt:

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

De gRPC-service registreert de details van de geslaagde aanroep in de logboeken die naar de opdrachtprompt zijn geschreven:

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

Notitie

Voor de code in dit artikel is het ASP.NET Core HTTPS-ontwikkelingscertificaat vereist om de gRPC-service te beveiligen. Als de .NET gRPC-client mislukt met het bericht The remote certificate is invalid according to the validation procedure. of The SSL connection could not be established., wordt het ontwikkelingscertificaat niet vertrouwd. Zie Een gRPC-service aanroepen met een niet-vertrouwd/ongeldig certificaatom dit probleem op te lossen.

Volgende stappen