Kurz: Vytvoření klienta a serveru gRPC v ASP.NET Core

V tomto kurzu se dozvíte, jak vytvořit klienta .NET Core gRPC a server ASP.NET Core gRPC. Na konci budete mít klienta gRPC, který komunikuje se službou gRPC Greeter.

V tomto kurzu jste:

  • Vytvořte server gRPC.
  • Vytvořte klienta gRPC.
  • Otestujte klientskou službu gRPC pomocí služby gRPC Greeter.

Požadavky

Vytvoření služby gRPC

  • Spusťte Visual Studio 2022 a vyberte Vytvořit nový projekt.
  • V dialogovém okně Vytvořit nový projekt vyhledejte gRPC. Vyberte ASP.NET Core gRPC Service a vyberte Další.
  • V dialogovém okně Konfigurovat nový projekt zadejte GrpcGreeternázev Project. Je důležité pojmenovat projekt GrpcGreeter , aby se obory názvů při kopírování a vkládání kódu shodovaly.
  • Vyberte Další.
  • V dialogovém okně Další informace vyberte .NET 6.0 (dlouhodobá podpora) a pak vyberte Vytvořit.

Spuštění služby

  • Stisknutím kombinace kláves Ctrl+F5 spusťte ladicí program.

    Visual Studio zobrazí následující dialogové okno, pokud projekt ještě není nakonfigurovaný tak, aby používal protokol SSL:

    This project is configured to use SSL. To avoid SSL warnings in the browser you can choose to trust the self-signed certificate that IIS Express has generated. Would you like to trust the IIS Express SSL certificate?

    Pokud důvěřujete certifikátu IIS Express SSL, vyberte Ano.

    Zobrazí se následující dialogové okno:

    Security warning dialog

    Pokud souhlasíte s důvěryhodností vývojového certifikátu, vyberte Ano .

    Informace o důvěryhodnosti prohlížeče Firefox najdete v článku o chybě certifikátu aplikace Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Spustí Kestrel server.
    • Spustí prohlížeč.
    • Přejde na http://localhost:port, například http://localhost:7042.
      • port: Náhodně přiřazené číslo portu pro aplikaci.
      • localhost: Standardní název hostitele pro místní počítač. Localhost obsluhuje pouze webové požadavky z místního počítače.

Protokoly ukazují službu, na https://localhost:<port>které naslouchá , kde <port> je číslo portu localhost náhodně přiřazené při vytvoření a nastavení Properties/launchSettings.jsonprojektu .

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

Poznámka

Šablona gRPC je nakonfigurovaná tak, aby používala protokol TLS (Transport Layer Security). Klienti gRPC potřebují k volání serveru protokol HTTPS. Číslo portu localhost služby gRPC je náhodně přiřazeno při vytvoření projektu a nastavení v souboru Properties\launchSettings.json projektu služby gRPC.

macOS nepodporuje ASP.NET Core gRPC s protokolem TLS. K úspěšnému spuštění služeb gRPC na macOS se vyžaduje další konfigurace. Další informace naleznete v tématu Nejde spustit aplikaci ASP.NET Core gRPC na macOS.

Prozkoumání souborů projektu

Soubory projektu GrpcGreeter :

  • Protos/greet.proto: definuje Greeter gRPC a slouží k vygenerování prostředků serveru gRPC. Další informace naleznete v tématu Úvod do gRPC.
  • Services složka: Obsahuje implementaci Greeter služby.
  • appSettings.json: Obsahuje konfigurační data, jako je protokol používaný .Kestrel Další informace najdete v tématu Konfigurace v ASP.NET Core.
  • Program.cs, který obsahuje:

Vytvoření klienta gRPC v konzolové aplikaci .NET

  • Otevřete druhou instanci Visual Studio a vyberte Vytvořit nový projekt.
  • V dialogovém okně Vytvořit nový projekt vyberte Konzolová aplikace a vyberte Další.
  • Do textového pole Project název zadejte GrpcGreeterClient a vyberte Další.
  • V dialogovém okně Další informace vyberte .NET 6.0 (dlouhodobá podpora) a pak vyberte Vytvořit.

Přidání požadovaných balíčků NuGet

Projekt klienta gRPC vyžaduje následující balíčky NuGet:

  • Grpc.Net.Client, který obsahuje klienta .NET Core.
  • Google.Protobuf, který obsahuje rozhraní API zpráv protobuf pro jazyk C#.
  • Grpc.Tools, které obsahují podporu nástrojů jazyka C#pro soubory protobuf. Balíček nástrojů se nevyžaduje za běhu, takže závislost je označena .PrivateAssets="All"

Nainstalujte balíčky pomocí konzoly Správce balíčků (PMC) nebo spravovat balíčky NuGet.

Možnost PMC pro instalaci balíčků

  • V Visual Studio vyberte Nástroje>NuGet Správce balíčků>Správce balíčků Konzola

  • V okně konzoly Správce balíčků spusťte cd GrpcGreeterClient změnu adresářů do složky obsahující GrpcGreeterClient.csproj soubory.

  • Spusťte následující příkazy:

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

Správa možnosti NuGet Balíčky pro instalaci balíčků

  • Klikněte pravým tlačítkem myši na projekt v Průzkumník řešení>Manage NuGet Packages.
  • Vyberte kartu Procházet.
  • Do vyhledávacího pole zadejte Grpc.Net.Client .
  • Na kartě Procházet vyberte balíček Grpc.Net.Client a vyberte Nainstalovat.
  • Opakujte pro Google.Protobuf a Grpc.Tools.

Přidat greet.proto

  • V projektu klienta gRPC vytvořte složku Protos .

  • Zkopírujte soubor Protos\greet.proto ze služby gRPC Greeter do složky Protos v projektu klienta gRPC.

  • Aktualizujte obor názvů uvnitř greet.proto souboru na obor názvů projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • GrpcGreeterClient.csproj Upravte soubor projektu:

Klikněte pravým tlačítkem myši na projekt a vyberte Upravit Project Soubor.

  • Přidejte skupinu položek s elementem <Protobuf> , který odkazuje na soubor greet.proto :

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

Vytvoření klienta Greeter

  • Vytvořte projekt klienta pro vytvoření typů v GrpcGreeterClient oboru názvů.

Poznámka

Typy GrpcGreeterClient se generují automaticky procesem sestavení. Balíček nástrojů Grpc.Tools generuje následující soubory na základě souboru greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: Kód vyrovnávací paměti protokolu, který naplní, serializuje a načte typy zpráv požadavku a odpovědi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Obsahuje vygenerované třídy klientů.

Další informace o prostředcích jazyka C# automaticky generovaných grpc.Tools najdete v tématu služby gRPC s C#: Vygenerované prostředky jazyka C#.

  • Aktualizujte soubor klienta Program.cs gRPC následujícím kódem.

    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();
    
  • V předchozím zvýrazněném kódu nahraďte číslo 7042 portu localhost číslem HTTPS portu zadaným v Properties/launchSettings.jsonGrpcGreeter rámci projektu služby.

Program.cs obsahuje vstupní bod a logiku klienta gRPC.

Klient Greeter je vytvořen takto:

  • Vytvoření GrpcChannel instance obsahující informace pro vytvoření připojení ke službě gRPC
  • GrpcChannel Použití nástroje k vytvoření klienta 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();

Klient Greeter volá asynchronní SayHello metodu. Zobrazí se výsledek SayHello hovoru:

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

Otestování klienta gRPC pomocí služby gRPC Greeter

  • Ve službě Greeter stiskněte a spusťte Ctrl+F5 server bez ladicího programu.
  • GrpcGreeterClient V projektu spusťte Ctrl+F5 klienta bez ladicího programu.

Klient odešle službě pozdrav se zprávou obsahující její název GreeterClient. Služba odešle zprávu "Hello GreeterClient" jako odpověď. V příkazovém řádku se zobrazí odpověď Hello GreeterClient:

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

Služba gRPC zaznamenává podrobnosti o úspěšném volání v protokolech zapsaných do příkazového řádku:

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

appsettings.Development.json Aktualizujte soubor přidáním následujících řádků:

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

Poznámka

Kód v tomto článku vyžaduje k zabezpečení služby gRPC ASP.NET Core vývojový certifikát HTTPS. Pokud klient .NET gRPC selže se zprávou The remote certificate is invalid according to the validation procedure. nebo The SSL connection could not be established.není důvěryhodný vývojový certifikát. Pokud chcete tento problém vyřešit, přečtěte si téma Volání služby gRPC s nedůvěryhodným nebo neplatným certifikátem.

Upozornění

ASP.NET Core gRPC má další požadavky pro použití se službou Azure App Service nebo IIS. Další informace o tom, kde lze gRPC použít, najdete v tématu gRPC na podporovaných platformách .NET.

Další kroky

V tomto kurzu se dozvíte, jak vytvořit klienta gRPC .NET Core a server gRPC ASP.NET Core.

Na konci budete mít klienta gRPC, který komunikuje se službou gRPC Greeter.

Umožňuje zobrazit nebo stáhnout ukázkový kód (jak stáhnout).

V tomto kurzu jste:

  • Vytvořte server gRPC.
  • Vytvořte klienta gRPC.
  • Otestujte klientskou službu gRPC pomocí služby gRPC Greeter.

Požadavky

Vytvoření služby gRPC

  • Spusťte Visual Studio a vyberte Vytvořit nový projekt.
  • V dialogovém okně Vytvořit nový projekt vyberte službu gRPC a vyberte Další.
  • V dialogovém okně Konfigurovat nový projekt zadejte GrpcGreeternázev Project. Je důležité pojmenovat projekt GrpcGreeter , aby se obory názvů při kopírování a vkládání kódu shodovaly.
  • Vyberte Další.
  • V dialogovém okně Další informace vyberte v rozevíracím seznamu Cílové rozhraní.NET 5.0.
  • Vyberte Vytvořit.

Spuštění služby

  • Stisknutím kombinace kláves Ctrl+F5 spusťte ladicí program.

    Visual Studio zobrazí následující dialog, pokud projekt ještě není nakonfigurovaný tak, aby používal PROTOKOL SSL:

    This project is configured to use SSL. To avoid SSL warnings in the browser you can choose to trust the self-signed certificate that IIS Express has generated. Would you like to trust the IIS Express SSL certificate?

    Pokud důvěřujete certifikátu IIS Express SSL, vyberte ano.

    Zobrazí se následující dialogové okno:

    Security warning dialog

    Pokud souhlasíte s důvěryhodností vývojového certifikátu, vyberte ano .

    Informace o důvěryhodnosti prohlížeče Firefox naleznete v článku o chybě certifikátu aplikace Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio spustí IIS Express a spustí aplikaci. Na panelu Adresa se zobrazuje localhost:port# něco jako example.com. Je to proto, že localhost se jedná o standardní název hostitele místního počítače. Localhost obsluhuje webové požadavky pouze z místního počítače. Když Visual Studio vytvoří webový projekt, použije se pro webový server náhodný port.

Protokoly zobrazují službu, na které naslouchá 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

Poznámka

Šablona gRPC je nakonfigurovaná tak, aby používala protokol TLS (Transport Layer Security). Klienti gRPC potřebují k volání serveru protokol HTTPS.

macOS nepodporuje ASP.NET Core gRPC s protokolem TLS. K úspěšnému spuštění služeb gRPC v macOS se vyžaduje další konfigurace. Další informace najdete v tématu Nejde spustit ASP.NET Core aplikaci gRPC na macOS.

Prozkoumání souborů projektu

Soubory projektu GrpcGreeter :

  • greet.proto: Soubor Protos/greet.proto definuje gRPC a slouží k vygenerování Greeter prostředků serveru gRPC. Další informace najdete v tématu Úvod do gRPC.
  • Složka Služeb : Obsahuje implementaci Greeter služby.
  • appsettings.json: Obsahuje konfigurační data, jako je protokol používaný Kestrel. Další informace najdete v tématu Konfigurace v ASP.NET Core.
  • Program.cs: Obsahuje vstupní bod pro službu gRPC. Další informace najdete v tématu Obecný hostitel .NET v ASP.NET Core.
  • Startup.cs: Obsahuje kód, který konfiguruje chování aplikace. Další informace najdete v tématu Spuštění aplikace.

Vytvoření klienta gRPC v konzolové aplikaci .NET

  • Otevřete druhou instanci Visual Studio a vyberte Vytvořit nový projekt.
  • V dialogovém okně Vytvořit nový projekt vyberte Konzolová aplikace (.NET Core) a vyberte Další.
  • Do textového pole Project název zadejte GrpcGreeterClient a vyberte Vytvořit.

Přidání požadovaných balíčků

Klientský projekt gRPC vyžaduje následující balíčky:

  • Grpc.Net.Client, který obsahuje klienta .NET Core.
  • Google.Protobuf, která obsahuje rozhraní API zpráv protobuf pro C#.
  • Grpc.Tools, který obsahuje podporu nástrojů jazyka C# pro soubory protobuf. Balíček nástrojů není vyžadován za běhu, takže závislost je označena PrivateAssets="All".

Nainstalujte balíčky pomocí konzoly Správce balíčků (PMC) nebo spravovat balíčky NuGet.

Možnost PMC nainstalovat balíčky

  • V Visual Studio vyberte Nástroje>NuGet Správce balíčků>Správce balíčků Konzola

  • V okně konzoly Správce balíčků spusťte cd GrpcGreeterClient změnu adresářů do složky obsahující GrpcGreeterClient.csproj soubory.

  • Spusťte následující příkazy:

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

Správa možností NuGet Balíčky pro instalaci balíčků

  • Klikněte pravým tlačítkem na projekt v Průzkumník řešení>Manage NuGet Packages.
  • Vyberte kartu Procházet.
  • Do vyhledávacího pole zadejte Grpc.Net.Client .
  • Na kartě Procházet vyberte balíček Grpc.Net.Client a vyberte Nainstalovat.
  • Opakovat pro Google.Protobuf a Grpc.Tools.

Přidat greet.proto

  • Vytvořte složku Protos v projektu klienta gRPC.

  • Zkopírujte soubor Protos\greet.proto ze služby gRPC Greeter do složky Protos v projektu klienta gRPC.

  • Aktualizujte obor názvů uvnitř greet.proto souboru na obor názvů projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Upravte GrpcGreeterClient.csproj soubor projektu:

    Klikněte pravým tlačítkem myši na projekt a vyberte Upravit Project Soubor.


  • Přidejte skupinu položek s elementem <Protobuf> , který odkazuje na soubor greet.proto :

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

Vytvoření klienta Greeter

  • Vytvořte projekt klienta, abyste vytvořili typy v GrpcGreeterClient oboru názvů.

Poznámka

Typy GrpcGreeterClient se automaticky vygenerují procesem sestavení. Balíček nástrojů Grpc.Tools generuje následující soubory na základě souboru greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: Kód vyrovnávací paměti protokolu, který naplní, serializuje a načte typy zpráv požadavku a odpovědi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Obsahuje vygenerované klientské třídy.

Další informace o prostředcích jazyka C# automaticky vygenerovaných nástroji Grpc.Tools najdete v tématu služby gRPC s C#: Vygenerované prostředky jazyka C#.

  • Aktualizujte klientský Program.cs soubor gRPC následujícím kódem:

    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 obsahuje vstupní bod a logiku klienta gRPC.

Klient Greeter je vytvořen takto:

  • GrpcChannel Vytvoření instance obsahující informace pro vytvoření připojení ke službě gRPC
  • Pomocí nástroje GrpcChannel pro vytvoření klienta 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();
}

Klient Greeter volá asynchronní SayHello metodu. Zobrazí se výsledek SayHello hovoru:

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

Otestování klienta gRPC pomocí služby gRPC Greeter

  • Ve službě Greeter spusťte server bez ladicího programu.Ctrl+F5
  • GrpcGreeterClient V projektu spusťte klienta bez ladicího programu.Ctrl+F5

Klient odešle službě pozdrav se zprávou obsahující její název GreeterClient. Služba odešle zprávu "Hello GreeterClient" jako odpověď. Odpověď Hello GreeterClient se zobrazí na příkazovém řádku:

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

Služba gRPC zaznamenává podrobnosti o úspěšném volání v protokolech zapsaných do příkazového řádku:

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

Poznámka

Kód v tomto článku vyžaduje k zabezpečení služby gRPC ASP.NET Core vývojový certifikát HTTPS. Pokud klient .NET gRPC selže se zprávou The remote certificate is invalid according to the validation procedure. nebo The SSL connection could not be established.není důvěryhodný vývojový certifikát. Pokud chcete tento problém vyřešit, přečtěte si téma Volání služby gRPC s nedůvěryhodným nebo neplatným certifikátem.

Upozornění

ASP.NET Core gRPC má další požadavky na použití s Azure App Service nebo službou IIS. Další informace o tom, kde se dá gRPC použít, najdete v tématu gRPC na podporovaných platformách .NET.

Další kroky

V tomto kurzu se dozvíte, jak vytvořit klienta .NET Core gRPC a server ASP.NET Core gRPC.

Na konci budete mít klienta gRPC, který komunikuje se službou gRPC Greeter.

Zobrazení nebo stažení vzorového kódu (postup stažení)

V tomto kurzu jste:

  • Vytvořte server gRPC.
  • Vytvořte klienta gRPC.
  • Otestujte klientskou službu gRPC pomocí služby gRPC Greeter.

Požadavky

Vytvoření služby gRPC

  • Spusťte Visual Studio a vyberte Vytvořit nový projekt. Případně v nabídce Visual Studio Soubor vyberte Možnost Nový>Project.

  • V dialogovém okně Vytvořit nový projekt vyberte gRPC Service a vyberte Další:

    Create a new project dialog in Visual Studio

  • Pojmenujte projekt GrpcGreeter. Je důležité pojmenovat projekt GrpcGreeter , aby se obory názvů při kopírování a vkládání kódu shodovaly.

  • Vyberte Vytvořit.

  • V dialogovém okně Vytvořit novou službu gRPC :

    • Je vybrána šablona služby gRPC .
    • Vyberte Vytvořit.

Spuštění služby

  • Stisknutím kombinace kláves Ctrl+F5 spusťte ladicí program.

    Visual Studio zobrazí následující dialogové okno, pokud projekt ještě není nakonfigurovaný tak, aby používal protokol SSL:

    This project is configured to use SSL. To avoid SSL warnings in the browser you can choose to trust the self-signed certificate that IIS Express has generated. Would you like to trust the IIS Express SSL certificate?

    Pokud důvěřujete certifikátu IIS Express SSL, vyberte Ano.

    Zobrazí se následující dialogové okno:

    Security warning dialog

    Pokud souhlasíte s důvěryhodností vývojového certifikátu, vyberte Ano .

    Informace o důvěryhodnosti prohlížeče Firefox najdete v článku o chybě certifikátu aplikace Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio spustí IIS Express a spustí aplikaci. Na panelu Adresa se zobrazuje localhost:port# něco jako example.com. Je to proto, že localhost je standardní název hostitele místního počítače. Localhost obsluhuje pouze webové požadavky z místního počítače. Když Visual Studio vytvoří webový projekt, použije se pro webový server náhodný port.

Protokoly ukazují službu, na https://localhost:5001které naslouchá .

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

Poznámka

Šablona gRPC je nakonfigurovaná tak, aby používala protokol TLS (Transport Layer Security). Klienti gRPC potřebují k volání serveru protokol HTTPS.

macOS nepodporuje ASP.NET Core gRPC s protokolem TLS. K úspěšnému spuštění služeb gRPC v macOS se vyžaduje další konfigurace. Další informace najdete v tématu Nejde spustit ASP.NET Core aplikaci gRPC na macOS.

Prozkoumání souborů projektu

Soubory projektu GrpcGreeter :

  • greet.proto: Soubor Protos/greet.proto definuje gRPC a slouží k vygenerování Greeter prostředků serveru gRPC. Další informace najdete v tématu Úvod do gRPC.
  • Složka Služeb : Obsahuje implementaci Greeter služby.
  • appsettings.json: Obsahuje konfigurační data, jako je protokol používaný Kestrel. Další informace najdete v tématu Konfigurace v ASP.NET Core.
  • Program.cs: Obsahuje vstupní bod pro službu gRPC. Další informace najdete v tématu Obecný hostitel .NET v ASP.NET Core.
  • Startup.cs: Obsahuje kód, který konfiguruje chování aplikace. Další informace najdete v tématu Spuštění aplikace.

Vytvoření klienta gRPC v konzolové aplikaci .NET

  • Otevřete druhou instanci Visual Studio a vyberte Vytvořit nový projekt.
  • V dialogovém okně Vytvořit nový projekt vyberte Konzolová aplikace (.NET Core) a vyberte Další.
  • Do textového pole Project název zadejte GrpcGreeterClient a vyberte Vytvořit.

Přidání požadovaných balíčků

Klientský projekt gRPC vyžaduje následující balíčky:

  • Grpc.Net.Client, který obsahuje klienta .NET Core.
  • Google.Protobuf, která obsahuje rozhraní API zpráv protobuf pro C#.
  • Grpc.Tools, který obsahuje podporu nástrojů jazyka C# pro soubory protobuf. Balíček nástrojů není vyžadován za běhu, takže závislost je označena PrivateAssets="All".

Nainstalujte balíčky pomocí konzoly Správce balíčků (PMC) nebo spravovat balíčky NuGet.

Možnost PMC nainstalovat balíčky

  • V Visual Studio vyberte Nástroje>NuGet Správce balíčků>Správce balíčků Konzola

  • V okně konzoly Správce balíčků spusťte cd GrpcGreeterClient změnu adresářů do složky obsahující GrpcGreeterClient.csproj soubory.

  • Spusťte následující příkazy:

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

Správa možností NuGet Balíčky pro instalaci balíčků

  • Klikněte pravým tlačítkem na projekt v Průzkumník řešení>Manage NuGet Packages.
  • Vyberte kartu Procházet.
  • Do vyhledávacího pole zadejte Grpc.Net.Client .
  • Na kartě Procházet vyberte balíček Grpc.Net.Client a vyberte Nainstalovat.
  • Opakovat pro Google.Protobuf a Grpc.Tools.

Přidat greet.proto

  • Vytvořte složku Protos v projektu klienta gRPC.

  • Zkopírujte soubor Protos\greet.proto ze služby gRPC Greeter do složky Protos v projektu klienta gRPC.

  • Aktualizujte obor názvů uvnitř greet.proto souboru na obor názvů projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Upravte GrpcGreeterClient.csproj soubor projektu:

    Klikněte pravým tlačítkem myši na projekt a vyberte Upravit Project Soubor.


  • Přidejte skupinu položek s elementem <Protobuf> , který odkazuje na soubor greet.proto :

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

Vytvoření klienta Greeter

  • Vytvořte projekt klienta, abyste vytvořili typy v GrpcGreeterClient oboru názvů.

Poznámka

Typy GrpcGreeterClient se automaticky vygenerují procesem sestavení. Balíček nástrojů Grpc.Tools generuje následující soubory na základě souboru greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: Kód vyrovnávací paměti protokolu, který naplní, serializuje a načte typy zpráv požadavku a odpovědi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: Obsahuje vygenerované klientské třídy.

Další informace o prostředcích jazyka C# automaticky vygenerovaných nástroji Grpc.Tools najdete v tématu služby gRPC s C#: Vygenerované prostředky jazyka C#.

Aktualizujte klientský Program.cs soubor gRPC následujícím kódem:

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 obsahuje vstupní bod a logiku klienta gRPC.

Klient Greeter je vytvořen takto:

  • GrpcChannel Vytvoření instance obsahující informace pro vytvoření připojení ke službě gRPC
  • Pomocí nástroje GrpcChannel pro vytvoření klienta 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();
}

Klient Greeter volá asynchronní SayHello metodu. Zobrazí se výsledek SayHello hovoru:

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

Otestování klienta gRPC pomocí služby gRPC Greeter

  • Ve službě Greeter spusťte server bez ladicího programu.Ctrl+F5
  • GrpcGreeterClient V projektu spusťte klienta bez ladicího programu.Ctrl+F5

Klient odešle službě pozdrav se zprávou obsahující její název GreeterClient. Služba odešle zprávu "Hello GreeterClient" jako odpověď. Odpověď Hello GreeterClient se zobrazí na příkazovém řádku:

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

Služba gRPC zaznamenává podrobnosti o úspěšném volání v protokolech zapsaných do příkazového řádku:

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

Poznámka

Kód v tomto článku vyžaduje k zabezpečení služby gRPC ASP.NET Core vývojový certifikát HTTPS. Pokud klient .NET gRPC selže se zprávou The remote certificate is invalid according to the validation procedure. nebo The SSL connection could not be established.není důvěryhodný vývojový certifikát. Pokud chcete tento problém vyřešit, přečtěte si téma Volání služby gRPC s nedůvěryhodným nebo neplatným certifikátem.

Upozornění

ASP.NET Core gRPC má další požadavky na použití s Azure App Service nebo službou IIS. Další informace o tom, kde se dá gRPC použít, najdete v tématu gRPC na podporovaných platformách .NET.

Další kroky