Samouczek: tworzenie klienta i serwera gRPC w programie ASP.NET Core

W tym samouczku pokazano, jak utworzyć klienta gRPC platformy .NET Core i serwera gRPC platformy ASP.NET Core. Na końcu będziesz mieć klienta gRPC, który komunikuje się z usługą gRPC Greeter.

W tym samouczku zostały wykonane następujące czynności:

  • Utwórz serwer gRPC.
  • Utwórz klienta gRPC.
  • Przetestuj klienta gRPC za pomocą usługi gRPC Greeter.

Wymagania wstępne

Tworzenie usługi gRPC

  • Uruchom program Visual Studio 2022 i wybierz pozycję Nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wyszukaj ciąg gRPC. Wybierz pozycję ASP.NET Core gRPC Service i wybierz przycisk Dalej.
  • W oknie dialogowym Konfigurowanie nowego projektu wprowadź wartość GrpcGreeter w polu Nazwa projektu. Ważne jest, aby nazwać projekt GrpcGreeter , więc przestrzenie nazw są zgodne podczas kopiowania i wklejania kodu.
  • Wybierz Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 8.0 (obsługa długoterminowa), a następnie wybierz pozycję Utwórz.

Uruchamianie usługi

  • Naciśnij klawisze Ctrl+F5, aby uruchomić bez debugera.

    Program Visual Studio wyświetla następujące okno dialogowe, gdy projekt nie jest jeszcze skonfigurowany do używania protokołu SSL:

    Ten projekt jest skonfigurowany do używania protokołu SSL. Aby uniknąć ostrzeżeń SSL w przeglądarce, możesz zaufać certyfikatowi z podpisem własnym wygenerowanemu przez usługę IIS Express. Czy chcesz ufać certyfikatowi SSL usług IIS Express?

    Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.

    Zostanie wyświetlone następujące okno dialogowe:

    Okno dialogowe ostrzeżenia o zabezpieczeniach

    Wybierz pozycję Tak, jeśli wyrażasz zgodę na zaufanie certyfikatowi programistycznemu.

    Aby uzyskać informacje na temat zaufania przeglądarce Firefox, zobacz Błąd certyfikatu przeglądarki Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Uruchamia Kestrel serwer.
    • Uruchamia przeglądarkę.
    • Przechodzi do adresu http://localhost:port, takiego jak http://localhost:7042.
      • port: losowo przypisany numer portu dla aplikacji.
      • localhost: Standardowa nazwa hosta komputera lokalnego. Host lokalny obsługuje tylko żądania internetowe z komputera lokalnego.

Dzienniki pokazują, że usługa nasłuchuje na https://localhost:<port>, gdzie <port> jest numer portu hosta lokalnego losowo przypisany podczas tworzenia i ustawiania projektu w .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

Uwaga

Szablon gRPC jest skonfigurowany do używania protokołu Transport Layer Security (TLS). Klienci gRPC muszą używać protokołu HTTPS do wywoływania serwera. Numer portu hosta lokalnego usługi gRPC jest losowo przypisywany podczas tworzenia projektu i ustawiany w pliku Properties\launch Ustawienia.json projektu usługi gRPC.

Sprawdzanie plików projektu

Pliki projektu GrpcGreeter :

  • Protos/greet.proto: definiuje gRPC Greeter i służy do generowania zasobów serwera gRPC. Aby uzyskać więcej informacji, zobacz Wprowadzenie do gRPC.
  • Services folder: zawiera implementację Greeter usługi.
  • appSettings.json: zawiera dane konfiguracji, takie jak protokół używany przez Kestrelprogram . Aby uzyskać więcej informacji, zobacz Konfiguracja na platformie ASP.NET Core.
  • Program.cs, który zawiera:

Tworzenie klienta gRPC w aplikacji konsolowej platformy .NET

  • Otwórz drugie wystąpienie programu Visual Studio i wybierz pozycję Nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję Aplikacja konsolowa, a następnie wybierz pozycję Dalej.
  • W polu tekstowym Nazwa projektu wprowadź ciąg GrpcGreeterClient i wybierz przycisk Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 8.0 (obsługa długoterminowa), a następnie wybierz pozycję Utwórz.

Dodawanie wymaganych pakietów NuGet

Projekt klienta gRPC wymaga następujących pakietów NuGet:

Zainstaluj pakiety przy użyciu konsoli Menedżer pakietów (PMC) lub zarządzania pakietami NuGet.

Opcja PMC instalowania pakietów

  • W programie Visual Studio wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola

  • W oknie Menedżer pakietów Konsola uruchom polecenie cd GrpcGreeterClient , aby zmienić katalogi na folder zawierający GrpcGreeterClient.csproj pliki.

  • Uruchom następujące polecenia:

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

Opcja Zarządzaj pakietami NuGet w celu zainstalowania pakietów

  • Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań> Zarządzaj pakietami NuGet.
  • Wybierz kartę Przeglądaj.
  • Wprowadź ciąg Grpc.Net.Client w polu wyszukiwania.
  • Wybierz pakiet Grpc.Net.Client z karty Przeglądaj i wybierz pozycję Zainstaluj.
  • Powtórz dla Google.Protobuf i Grpc.Tools.

Dodaj greet.proto

  • Utwórz folder Protos w projekcie klienta gRPC.

  • Skopiuj plik Protos\greet.proto z usługi gRPC Greeter do folderu Protos w projekcie klienta gRPC.

  • Zaktualizuj przestrzeń nazw wewnątrz greet.proto pliku do przestrzeni nazw projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • GrpcGreeterClient.csproj Edytuj plik projektu:

Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Edytuj plik projektu.

  • Dodaj grupę elementów z elementem odwołującym <Protobuf> się do pliku greet.proto :

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

Tworzenie klienta powitania

  • Skompiluj projekt klienta, aby utworzyć typy w GrpcGreeterClient przestrzeni nazw.

Uwaga

Typy GrpcGreeterClient są generowane automatycznie przez proces kompilacji. Pakiet narzędzi Grpc.Tools generuje następujące pliki na podstawie pliku greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: kod buforu protokołu, który wypełnia, serializuje i pobiera typy komunikatów żądania i odpowiedzi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: zawiera wygenerowane klasy klienta.

Aby uzyskać więcej informacji na temat zasobów języka C# generowanych automatycznie przez narzędzia Grpc.Tools, zobacz usługi gRPC z elementami C#: Wygenerowane zasoby języka C#.

  • Zaktualizuj plik klienta Program.cs gRPC przy użyciu następującego kodu.

    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();
    
  • W poprzednim wyróżnionym kodzie zastąp HTTPS numer portu localhost numerem 7042 portu określonym w Properties/launchSettings.json projekcie GrpcGreeter usługi.

Program.cs zawiera punkt wejścia i logikę klienta gRPC.

Klient greeter jest tworzony przez:

  • Utworzenie wystąpienia zawierającego GrpcChannel informacje dotyczące tworzenia połączenia z usługą gRPC.
  • Za pomocą polecenia GrpcChannel , aby skonstruować 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 wywołuje metodę asynchroniczną SayHello . Zostanie wyświetlony wynik SayHello wywołania:

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

Testowanie klienta gRPC za pomocą usługi gRPC Greeter

Zaktualizuj plik, appsettings.Development.json dodając następujące wyróżnione wiersze:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • W usłudze Greeter naciśnij klawisz Ctrl+F5 , aby uruchomić serwer bez debugera.
  • W projekcie GrpcGreeterClient naciśnij klawisz Ctrl+F5 , aby uruchomić klienta bez debugera.

Klient wysyła powitanie do usługi z komunikatem zawierającym jego nazwę GreeterClient. Usługa wysyła komunikat "Hello GreeterClient" jako odpowiedź. Odpowiedź "Hello GreeterClient" jest wyświetlana w wierszu polecenia:

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

Usługa gRPC rejestruje szczegóły pomyślnego wywołania w dziennikach zapisanych w wierszu polecenia:

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

Uwaga

Kod w tym artykule wymaga certyfikatu dewelopera ASP.NET Core HTTPS w celu zabezpieczenia usługi gRPC. Jeśli klient gRPC platformy .NET zakończy się niepowodzeniem z komunikatem The remote certificate is invalid according to the validation procedure. lub The SSL connection could not be established., certyfikat dewelopera nie jest zaufany. Aby rozwiązać ten problem, zobacz Wywoływanie usługi gRPC z niezaufanym/nieprawidłowym certyfikatem.

Następne kroki

W tym samouczku pokazano, jak utworzyć klienta gRPC platformy .NET Core i serwera gRPC platformy ASP.NET Core. Na końcu będziesz mieć klienta gRPC, który komunikuje się z usługą gRPC Greeter.

W tym samouczku zostały wykonane następujące czynności:

  • Utwórz serwer gRPC.
  • Utwórz klienta gRPC.
  • Przetestuj klienta gRPC za pomocą usługi gRPC Greeter.

Wymagania wstępne

Tworzenie usługi gRPC

  • Uruchom program Visual Studio 2022 i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wyszukaj ciąg gRPC. Wybierz pozycję ASP.NET Core gRPC Service i wybierz przycisk Dalej.
  • W oknie dialogowym Konfigurowanie nowego projektu wprowadź wartość GrpcGreeter w polu Nazwa projektu. Ważne jest, aby nazwać projekt GrpcGreeter , więc przestrzenie nazw są zgodne podczas kopiowania i wklejania kodu.
  • Wybierz Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 6.0 (obsługa długoterminowa), a następnie wybierz pozycję Utwórz.

Uruchamianie usługi

  • Naciśnij klawisze Ctrl+F5, aby uruchomić bez debugera.

    Program Visual Studio wyświetla następujące okno dialogowe, gdy projekt nie jest jeszcze skonfigurowany do używania protokołu SSL:

    Ten projekt jest skonfigurowany do używania protokołu SSL. Aby uniknąć ostrzeżeń SSL w przeglądarce, możesz zaufać certyfikatowi z podpisem własnym wygenerowanemu przez usługę IIS Express. Czy chcesz ufać certyfikatowi SSL usług IIS Express?

    Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.

    Zostanie wyświetlone następujące okno dialogowe:

    Okno dialogowe ostrzeżenia o zabezpieczeniach

    Wybierz pozycję Tak, jeśli wyrażasz zgodę na zaufanie certyfikatowi programistycznemu.

    Aby uzyskać informacje na temat zaufania przeglądarce Firefox, zobacz Błąd certyfikatu przeglądarki Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Uruchamia Kestrel serwer.
    • Uruchamia przeglądarkę.
    • Przechodzi do adresu http://localhost:port, takiego jak http://localhost:7042.
      • port: losowo przypisany numer portu dla aplikacji.
      • localhost: Standardowa nazwa hosta komputera lokalnego. Host lokalny obsługuje tylko żądania internetowe z komputera lokalnego.

Dzienniki pokazują, że usługa nasłuchuje na https://localhost:<port>, gdzie <port> jest numer portu hosta lokalnego losowo przypisany podczas tworzenia i ustawiania projektu w .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

Uwaga

Szablon gRPC jest skonfigurowany do używania protokołu Transport Layer Security (TLS). Klienci gRPC muszą używać protokołu HTTPS do wywoływania serwera. Numer portu hosta lokalnego usługi gRPC jest losowo przypisywany podczas tworzenia projektu i ustawiany w pliku Properties\launch Ustawienia.json projektu usługi gRPC.

System macOS nie obsługuje ASP.NET Core gRPC z protokołem TLS. Do pomyślnego uruchomienia usług gRPC w systemie macOS jest wymagana dodatkowa konfiguracja. Aby uzyskać więcej informacji, zobacz Nie można uruchomić aplikacji gRPC platformy ASP.NET Core w systemie macOS.

Sprawdzanie plików projektu

Pliki projektu GrpcGreeter :

  • Protos/greet.proto: definiuje gRPC Greeter i służy do generowania zasobów serwera gRPC. Aby uzyskać więcej informacji, zobacz Wprowadzenie do gRPC.
  • Services folder: zawiera implementację Greeter usługi.
  • appSettings.json: zawiera dane konfiguracji, takie jak protokół używany przez Kestrelprogram . Aby uzyskać więcej informacji, zobacz Konfiguracja na platformie ASP.NET Core.
  • Program.cs, który zawiera:

Tworzenie klienta gRPC w aplikacji konsolowej platformy .NET

  • Otwórz drugie wystąpienie programu Visual Studio i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję Aplikacja konsolowa, a następnie wybierz pozycję Dalej.
  • W polu tekstowym Nazwa projektu wprowadź ciąg GrpcGreeterClient i wybierz przycisk Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 6.0 (obsługa długoterminowa), a następnie wybierz pozycję Utwórz.

Dodawanie wymaganych pakietów NuGet

Projekt klienta gRPC wymaga następujących pakietów NuGet:

Zainstaluj pakiety przy użyciu konsoli Menedżer pakietów (PMC) lub zarządzania pakietami NuGet.

Opcja PMC instalowania pakietów

  • W programie Visual Studio wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola

  • W oknie Menedżer pakietów Konsola uruchom polecenie cd GrpcGreeterClient , aby zmienić katalogi na folder zawierający GrpcGreeterClient.csproj pliki.

  • Uruchom następujące polecenia:

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

Opcja Zarządzaj pakietami NuGet w celu zainstalowania pakietów

  • Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań> Zarządzaj pakietami NuGet.
  • Wybierz kartę Przeglądaj.
  • Wprowadź ciąg Grpc.Net.Client w polu wyszukiwania.
  • Wybierz pakiet Grpc.Net.Client z karty Przeglądaj i wybierz pozycję Zainstaluj.
  • Powtórz dla Google.Protobuf i Grpc.Tools.

Dodaj greet.proto

  • Utwórz folder Protos w projekcie klienta gRPC.

  • Skopiuj plik Protos\greet.proto z usługi gRPC Greeter do folderu Protos w projekcie klienta gRPC.

  • Zaktualizuj przestrzeń nazw wewnątrz greet.proto pliku do przestrzeni nazw projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • GrpcGreeterClient.csproj Edytuj plik projektu:

Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Edytuj plik projektu.

  • Dodaj grupę elementów z elementem odwołującym <Protobuf> się do pliku greet.proto :

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

Tworzenie klienta powitania

  • Skompiluj projekt klienta, aby utworzyć typy w GrpcGreeterClient przestrzeni nazw.

Uwaga

Typy GrpcGreeterClient są generowane automatycznie przez proces kompilacji. Pakiet narzędzi Grpc.Tools generuje następujące pliki na podstawie pliku greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: kod buforu protokołu, który wypełnia, serializuje i pobiera typy komunikatów żądania i odpowiedzi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: zawiera wygenerowane klasy klienta.

Aby uzyskać więcej informacji na temat zasobów języka C# generowanych automatycznie przez narzędzia Grpc.Tools, zobacz usługi gRPC z elementami C#: Wygenerowane zasoby języka C#.

  • Zaktualizuj plik klienta Program.cs gRPC przy użyciu następującego kodu.

    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();
    
  • W poprzednim wyróżnionym kodzie zastąp HTTPS numer portu localhost numerem 7042 portu określonym w Properties/launchSettings.json projekcie GrpcGreeter usługi.

Program.cs zawiera punkt wejścia i logikę klienta gRPC.

Klient greeter jest tworzony przez:

  • Utworzenie wystąpienia zawierającego GrpcChannel informacje dotyczące tworzenia połączenia z usługą gRPC.
  • Za pomocą polecenia GrpcChannel , aby skonstruować 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 wywołuje metodę asynchroniczną SayHello . Zostanie wyświetlony wynik SayHello wywołania:

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

Testowanie klienta gRPC za pomocą usługi gRPC Greeter

Zaktualizuj plik, appsettings.Development.json dodając następujące wyróżnione wiersze:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • W usłudze Greeter naciśnij klawisz Ctrl+F5 , aby uruchomić serwer bez debugera.
  • W projekcie GrpcGreeterClient naciśnij klawisz Ctrl+F5 , aby uruchomić klienta bez debugera.

Klient wysyła powitanie do usługi z komunikatem zawierającym jego nazwę GreeterClient. Usługa wysyła komunikat "Hello GreeterClient" jako odpowiedź. Odpowiedź "Hello GreeterClient" jest wyświetlana w wierszu polecenia:

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

Usługa gRPC rejestruje szczegóły pomyślnego wywołania w dziennikach zapisanych w wierszu polecenia:

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

Uwaga

Kod w tym artykule wymaga certyfikatu dewelopera ASP.NET Core HTTPS w celu zabezpieczenia usługi gRPC. Jeśli klient gRPC platformy .NET zakończy się niepowodzeniem z komunikatem The remote certificate is invalid according to the validation procedure. lub The SSL connection could not be established., certyfikat dewelopera nie jest zaufany. Aby rozwiązać ten problem, zobacz Wywoływanie usługi gRPC z niezaufanym/nieprawidłowym certyfikatem.

Następne kroki

W tym samouczku pokazano, jak utworzyć klienta gRPC platformy .NET Core i serwera gRPC platformy ASP.NET Core. Na końcu będziesz mieć klienta gRPC, który komunikuje się z usługą gRPC Greeter.

W tym samouczku zostały wykonane następujące czynności:

  • Utwórz serwer gRPC.
  • Utwórz klienta gRPC.
  • Przetestuj klienta gRPC za pomocą usługi gRPC Greeter.

Wymagania wstępne

Tworzenie usługi gRPC

  • Uruchom program Visual Studio 2022 i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wyszukaj ciąg gRPC. Wybierz pozycję ASP.NET Core gRPC Service i wybierz przycisk Dalej.
  • W oknie dialogowym Konfigurowanie nowego projektu wprowadź wartość GrpcGreeter w polu Nazwa projektu. Ważne jest, aby nazwać projekt GrpcGreeter , więc przestrzenie nazw są zgodne podczas kopiowania i wklejania kodu.
  • Wybierz Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 6.0 (obsługa długoterminowa), a następnie wybierz pozycję Utwórz.

Uruchamianie usługi

  • Naciśnij klawisze Ctrl+F5, aby uruchomić bez debugera.

    Program Visual Studio wyświetla następujące okno dialogowe, gdy projekt nie jest jeszcze skonfigurowany do używania protokołu SSL:

    Ten projekt jest skonfigurowany do używania protokołu SSL. Aby uniknąć ostrzeżeń SSL w przeglądarce, możesz zaufać certyfikatowi z podpisem własnym wygenerowanemu przez usługę IIS Express. Czy chcesz ufać certyfikatowi SSL usług IIS Express?

    Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.

    Zostanie wyświetlone następujące okno dialogowe:

    Okno dialogowe ostrzeżenia o zabezpieczeniach

    Wybierz pozycję Tak, jeśli wyrażasz zgodę na zaufanie certyfikatowi programistycznemu.

    Aby uzyskać informacje na temat zaufania przeglądarce Firefox, zobacz Błąd certyfikatu przeglądarki Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Uruchamia Kestrel serwer.
    • Uruchamia przeglądarkę.
    • Przechodzi do adresu http://localhost:port, takiego jak http://localhost:7042.
      • port: losowo przypisany numer portu dla aplikacji.
      • localhost: Standardowa nazwa hosta komputera lokalnego. Host lokalny obsługuje tylko żądania internetowe z komputera lokalnego.

Dzienniki pokazują, że usługa nasłuchuje na https://localhost:<port>, gdzie <port> jest numer portu hosta lokalnego losowo przypisany podczas tworzenia i ustawiania projektu w .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

Uwaga

Szablon gRPC jest skonfigurowany do używania protokołu Transport Layer Security (TLS). Klienci gRPC muszą używać protokołu HTTPS do wywoływania serwera. Numer portu hosta lokalnego usługi gRPC jest losowo przypisywany podczas tworzenia projektu i ustawiany w pliku Properties\launch Ustawienia.json projektu usługi gRPC.

System macOS nie obsługuje ASP.NET Core gRPC z protokołem TLS. Do pomyślnego uruchomienia usług gRPC w systemie macOS jest wymagana dodatkowa konfiguracja. Aby uzyskać więcej informacji, zobacz Nie można uruchomić aplikacji gRPC platformy ASP.NET Core w systemie macOS.

Sprawdzanie plików projektu

Pliki projektu GrpcGreeter :

  • Protos/greet.proto: definiuje gRPC Greeter i służy do generowania zasobów serwera gRPC. Aby uzyskać więcej informacji, zobacz Wprowadzenie do gRPC.
  • Services folder: zawiera implementację Greeter usługi.
  • appSettings.json: zawiera dane konfiguracji, takie jak protokół używany przez Kestrelprogram . Aby uzyskać więcej informacji, zobacz Konfiguracja na platformie ASP.NET Core.
  • Program.cs, który zawiera:

Tworzenie klienta gRPC w aplikacji konsolowej platformy .NET

  • Otwórz drugie wystąpienie programu Visual Studio i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję Aplikacja konsolowa, a następnie wybierz pozycję Dalej.
  • W polu tekstowym Nazwa projektu wprowadź ciąg GrpcGreeterClient i wybierz przycisk Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 6.0 (obsługa długoterminowa), a następnie wybierz pozycję Utwórz.

Dodawanie wymaganych pakietów NuGet

Projekt klienta gRPC wymaga następujących pakietów NuGet:

Zainstaluj pakiety przy użyciu konsoli Menedżer pakietów (PMC) lub zarządzania pakietami NuGet.

Opcja PMC instalowania pakietów

  • W programie Visual Studio wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola

  • W oknie Menedżer pakietów Konsola uruchom polecenie cd GrpcGreeterClient , aby zmienić katalogi na folder zawierający GrpcGreeterClient.csproj pliki.

  • Uruchom następujące polecenia:

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

Opcja Zarządzaj pakietami NuGet w celu zainstalowania pakietów

  • Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań> Zarządzaj pakietami NuGet.
  • Wybierz kartę Przeglądaj.
  • Wprowadź ciąg Grpc.Net.Client w polu wyszukiwania.
  • Wybierz pakiet Grpc.Net.Client z karty Przeglądaj i wybierz pozycję Zainstaluj.
  • Powtórz dla Google.Protobuf i Grpc.Tools.

Dodaj greet.proto

  • Utwórz folder Protos w projekcie klienta gRPC.

  • Skopiuj plik Protos\greet.proto z usługi gRPC Greeter do folderu Protos w projekcie klienta gRPC.

  • Zaktualizuj przestrzeń nazw wewnątrz greet.proto pliku do przestrzeni nazw projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • GrpcGreeterClient.csproj Edytuj plik projektu:

Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Edytuj plik projektu.

  • Dodaj grupę elementów z elementem odwołującym <Protobuf> się do pliku greet.proto :

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

Tworzenie klienta powitania

  • Skompiluj projekt klienta, aby utworzyć typy w GrpcGreeterClient przestrzeni nazw.

Uwaga

Typy GrpcGreeterClient są generowane automatycznie przez proces kompilacji. Pakiet narzędzi Grpc.Tools generuje następujące pliki na podstawie pliku greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: kod buforu protokołu, który wypełnia, serializuje i pobiera typy komunikatów żądania i odpowiedzi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: zawiera wygenerowane klasy klienta.

Aby uzyskać więcej informacji na temat zasobów języka C# generowanych automatycznie przez narzędzia Grpc.Tools, zobacz usługi gRPC z elementami C#: Wygenerowane zasoby języka C#.

  • Zaktualizuj plik klienta Program.cs gRPC przy użyciu następującego kodu.

    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();
    
  • W poprzednim wyróżnionym kodzie zastąp HTTPS numer portu localhost numerem 7042 portu określonym w Properties/launchSettings.json projekcie GrpcGreeter usługi.

Program.cs zawiera punkt wejścia i logikę klienta gRPC.

Klient greeter jest tworzony przez:

  • Utworzenie wystąpienia zawierającego GrpcChannel informacje dotyczące tworzenia połączenia z usługą gRPC.
  • Za pomocą polecenia GrpcChannel , aby skonstruować 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 wywołuje metodę asynchroniczną SayHello . Zostanie wyświetlony wynik SayHello wywołania:

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

Testowanie klienta gRPC za pomocą usługi gRPC Greeter

  • W usłudze Greeter naciśnij klawisz Ctrl+F5 , aby uruchomić serwer bez debugera.
  • W projekcie GrpcGreeterClient naciśnij klawisz Ctrl+F5 , aby uruchomić klienta bez debugera.

Klient wysyła powitanie do usługi z komunikatem zawierającym jego nazwę GreeterClient. Usługa wysyła komunikat "Hello GreeterClient" jako odpowiedź. Odpowiedź "Hello GreeterClient" jest wyświetlana w wierszu polecenia:

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

Usługa gRPC rejestruje szczegóły pomyślnego wywołania w dziennikach zapisanych w wierszu polecenia:

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

Zaktualizuj plik, appsettings.Development.json dodając następujące wiersze:

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

Uwaga

Kod w tym artykule wymaga certyfikatu dewelopera ASP.NET Core HTTPS w celu zabezpieczenia usługi gRPC. Jeśli klient gRPC platformy .NET zakończy się niepowodzeniem z komunikatem The remote certificate is invalid according to the validation procedure. lub The SSL connection could not be established., certyfikat dewelopera nie jest zaufany. Aby rozwiązać ten problem, zobacz Wywoływanie usługi gRPC z niezaufanym/nieprawidłowym certyfikatem.

Następne kroki

W tym samouczku pokazano, jak utworzyć klienta gRPC platformy .NET Core i serwera gRPC platformy ASP.NET Core.

Na końcu będziesz mieć klienta gRPC, który komunikuje się z usługą gRPC Greeter.

Wyświetl lub pobierz przykładowy kod (jak pobrać).

W tym samouczku zostały wykonane następujące czynności:

  • Utwórz serwer gRPC.
  • Utwórz klienta gRPC.
  • Przetestuj klienta gRPC za pomocą usługi gRPC Greeter.

Wymagania wstępne

Tworzenie usługi gRPC

  • Uruchom program Visual Studio i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję gRPC Service i wybierz przycisk Dalej.
  • W oknie dialogowym Konfigurowanie nowego projektu wprowadź wartość GrpcGreeter w polu Nazwa projektu. Ważne jest, aby nazwać projekt GrpcGreeter , więc przestrzenie nazw są zgodne podczas kopiowania i wklejania kodu.
  • Wybierz Dalej.
  • W oknie dialogowym Dodatkowe informacje wybierz pozycję .NET 5.0 na liście rozwijanej Platforma docelowa.
  • Wybierz pozycję Utwórz.

Uruchamianie usługi

  • Naciśnij klawisze Ctrl+F5, aby uruchomić bez debugera.

    Program Visual Studio wyświetla następujące okno dialogowe, gdy projekt nie jest jeszcze skonfigurowany do używania protokołu SSL:

    Ten projekt jest skonfigurowany do używania protokołu SSL. Aby uniknąć ostrzeżeń SSL w przeglądarce, możesz zaufać certyfikatowi z podpisem własnym wygenerowanemu przez usługę IIS Express. Czy chcesz ufać certyfikatowi SSL usług IIS Express?

    Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.

    Zostanie wyświetlone następujące okno dialogowe:

    Okno dialogowe ostrzeżenia o zabezpieczeniach

    Wybierz pozycję Tak, jeśli wyrażasz zgodę na zaufanie certyfikatowi programistycznemu.

    Aby uzyskać informacje na temat zaufania przeglądarce Firefox, zobacz Błąd certyfikatu przeglądarki Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Program Visual Studio uruchamia program IIS Express i uruchamia aplikację. Na pasku adresu jest wyświetlana localhost:port# wartość , a nie na przykład example.com. Wynika to z faktu localhost , że jest to standardowa nazwa hosta komputera lokalnego. Host lokalny obsługuje tylko żądania internetowe z komputera lokalnego. Podczas tworzenia projektu internetowego w programie Visual Studio dla serwera internetowego jest używany losowy port.

Dzienniki pokazują, że usługa nasłuchuje na .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

Uwaga

Szablon gRPC jest skonfigurowany do używania protokołu Transport Layer Security (TLS). Klienci gRPC muszą używać protokołu HTTPS do wywoływania serwera.

System macOS nie obsługuje ASP.NET Core gRPC z protokołem TLS. Do pomyślnego uruchomienia usług gRPC w systemie macOS jest wymagana dodatkowa konfiguracja. Aby uzyskać więcej informacji, zobacz Nie można uruchomić aplikacji gRPC platformy ASP.NET Core w systemie macOS.

Sprawdzanie plików projektu

Pliki projektu GrpcGreeter :

  • greet.proto: Plik Protos/greet.proto definiuje Greeter gRPC i służy do generowania zasobów serwera gRPC. Aby uzyskać więcej informacji, zobacz Wprowadzenie do gRPC.
  • Folder usług : zawiera implementację Greeter usługi.
  • appsettings.json: zawiera dane konfiguracji, takie jak protokół używany przez Kestrelprogram . Aby uzyskać więcej informacji, zobacz Konfiguracja na platformie ASP.NET Core.
  • Program.cs: zawiera punkt wejścia usługi gRPC. Aby uzyskać więcej informacji, zobacz Host ogólny platformy ASP.NET Core.
  • Startup.cs: zawiera kod, który konfiguruje zachowanie aplikacji. Aby uzyskać więcej informacji, zobacz Uruchamianie aplikacji.

Tworzenie klienta gRPC w aplikacji konsolowej platformy .NET

  • Otwórz drugie wystąpienie programu Visual Studio i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję Aplikacja konsolowa (.NET Core) i wybierz pozycję Dalej.
  • W polu tekstowym Nazwa projektu wprowadź ciąg GrpcGreeterClient i wybierz pozycję Utwórz.

Dodawanie wymaganych pakietów

Projekt klienta gRPC wymaga następujących pakietów:

Zainstaluj pakiety przy użyciu konsoli Menedżer pakietów (PMC) lub zarządzania pakietami NuGet.

Opcja PMC instalowania pakietów

  • W programie Visual Studio wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola

  • W oknie Menedżer pakietów Konsola uruchom polecenie cd GrpcGreeterClient , aby zmienić katalogi na folder zawierający GrpcGreeterClient.csproj pliki.

  • Uruchom następujące polecenia:

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

Opcja Zarządzaj pakietami NuGet w celu zainstalowania pakietów

  • Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań> Zarządzaj pakietami NuGet.
  • Wybierz kartę Przeglądaj.
  • Wprowadź ciąg Grpc.Net.Client w polu wyszukiwania.
  • Wybierz pakiet Grpc.Net.Client z karty Przeglądaj i wybierz pozycję Zainstaluj.
  • Powtórz dla Google.Protobuf i Grpc.Tools.

Dodaj greet.proto

  • Utwórz folder Protos w projekcie klienta gRPC.

  • Skopiuj plik Protos\greet.proto z usługi gRPC Greeter do folderu Protos w projekcie klienta gRPC.

  • Zaktualizuj przestrzeń nazw wewnątrz greet.proto pliku do przestrzeni nazw projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • GrpcGreeterClient.csproj Edytuj plik projektu:

    Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Edytuj plik projektu.


  • Dodaj grupę elementów z elementem odwołującym <Protobuf> się do pliku greet.proto :

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

Tworzenie klienta powitania

  • Skompiluj projekt klienta, aby utworzyć typy w GrpcGreeterClient przestrzeni nazw.

Uwaga

Typy GrpcGreeterClient są generowane automatycznie przez proces kompilacji. Pakiet narzędzi Grpc.Tools generuje następujące pliki na podstawie pliku greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: kod buforu protokołu, który wypełnia, serializuje i pobiera typy komunikatów żądania i odpowiedzi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: zawiera wygenerowane klasy klienta.

Aby uzyskać więcej informacji na temat zasobów języka C# generowanych automatycznie przez narzędzia Grpc.Tools, zobacz usługi gRPC z elementami C#: Wygenerowane zasoby języka C#.

  • Zaktualizuj plik klienta Program.cs gRPC przy użyciu następującego kodu:

    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 zawiera punkt wejścia i logikę klienta gRPC.

Klient greeter jest tworzony przez:

  • Utworzenie wystąpienia zawierającego GrpcChannel informacje dotyczące tworzenia połączenia z usługą gRPC.
  • Za pomocą polecenia GrpcChannel , aby skonstruować 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 wywołuje metodę asynchroniczną SayHello . Zostanie wyświetlony wynik SayHello wywołania:

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

Testowanie klienta gRPC za pomocą usługi gRPC Greeter

  • W usłudze Greeter naciśnij klawisz Ctrl+F5 , aby uruchomić serwer bez debugera.
  • W projekcie GrpcGreeterClient naciśnij klawisz Ctrl+F5 , aby uruchomić klienta bez debugera.

Klient wysyła powitanie do usługi z komunikatem zawierającym jego nazwę GreeterClient. Usługa wysyła komunikat "Hello GreeterClient" jako odpowiedź. Odpowiedź "Hello GreeterClient" jest wyświetlana w wierszu polecenia:

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

Usługa gRPC rejestruje szczegóły pomyślnego wywołania w dziennikach zapisanych w wierszu polecenia:

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

Uwaga

Kod w tym artykule wymaga certyfikatu dewelopera ASP.NET Core HTTPS w celu zabezpieczenia usługi gRPC. Jeśli klient gRPC platformy .NET zakończy się niepowodzeniem z komunikatem The remote certificate is invalid according to the validation procedure. lub The SSL connection could not be established., certyfikat dewelopera nie jest zaufany. Aby rozwiązać ten problem, zobacz Wywoływanie usługi gRPC z niezaufanym/nieprawidłowym certyfikatem.

Następne kroki

W tym samouczku pokazano, jak utworzyć klienta gRPC platformy .NET Core i serwera gRPC platformy ASP.NET Core.

Na końcu będziesz mieć klienta gRPC, który komunikuje się z usługą gRPC Greeter.

Wyświetl lub pobierz przykładowy kod (jak pobrać).

W tym samouczku zostały wykonane następujące czynności:

  • Utwórz serwer gRPC.
  • Utwórz klienta gRPC.
  • Przetestuj klienta gRPC za pomocą usługi gRPC Greeter.

Wymagania wstępne

Tworzenie usługi gRPC

  • Uruchom program Visual Studio i wybierz pozycję Utwórz nowy projekt. Alternatywnie w menu Plik programu Visual Studio wybierz pozycję Nowy>projekt.

  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję gRPC Service i wybierz pozycję Dalej:

    Tworzenie nowego okna dialogowego projektu w programie Visual Studio

  • Nadaj projektowi nazwę GrpcGreeter. Ważne jest, aby nazwać projekt GrpcGreeter , więc przestrzenie nazw są zgodne podczas kopiowania i wklejania kodu.

  • Wybierz pozycję Utwórz.

  • W oknie dialogowym Tworzenie nowej usługi gRPC:

    • Wybrano szablon usługi gRPC.
    • Wybierz pozycję Utwórz.

Uruchamianie usługi

  • Naciśnij klawisze Ctrl+F5, aby uruchomić bez debugera.

    Program Visual Studio wyświetla następujące okno dialogowe, gdy projekt nie jest jeszcze skonfigurowany do używania protokołu SSL:

    Ten projekt jest skonfigurowany do używania protokołu SSL. Aby uniknąć ostrzeżeń SSL w przeglądarce, możesz zaufać certyfikatowi z podpisem własnym wygenerowanemu przez usługę IIS Express. Czy chcesz ufać certyfikatowi SSL usług IIS Express?

    Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.

    Zostanie wyświetlone następujące okno dialogowe:

    Okno dialogowe ostrzeżenia o zabezpieczeniach

    Wybierz pozycję Tak, jeśli wyrażasz zgodę na zaufanie certyfikatowi programistycznemu.

    Aby uzyskać informacje na temat zaufania przeglądarce Firefox, zobacz Błąd certyfikatu przeglądarki Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Program Visual Studio uruchamia program IIS Express i uruchamia aplikację. Na pasku adresu jest wyświetlana localhost:port# wartość , a nie na przykład example.com. Wynika to z faktu localhost , że jest to standardowa nazwa hosta komputera lokalnego. Host lokalny obsługuje tylko żądania internetowe z komputera lokalnego. Podczas tworzenia projektu internetowego w programie Visual Studio dla serwera internetowego jest używany losowy port.

Dzienniki pokazują, że usługa nasłuchuje na .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

Uwaga

Szablon gRPC jest skonfigurowany do używania protokołu Transport Layer Security (TLS). Klienci gRPC muszą używać protokołu HTTPS do wywoływania serwera.

System macOS nie obsługuje ASP.NET Core gRPC z protokołem TLS. Do pomyślnego uruchomienia usług gRPC w systemie macOS jest wymagana dodatkowa konfiguracja. Aby uzyskać więcej informacji, zobacz Nie można uruchomić aplikacji gRPC platformy ASP.NET Core w systemie macOS.

Sprawdzanie plików projektu

Pliki projektu GrpcGreeter :

  • greet.proto: Plik Protos/greet.proto definiuje Greeter gRPC i służy do generowania zasobów serwera gRPC. Aby uzyskać więcej informacji, zobacz Wprowadzenie do gRPC.
  • Folder usług : zawiera implementację Greeter usługi.
  • appsettings.json: zawiera dane konfiguracji, takie jak protokół używany przez Kestrelprogram . Aby uzyskać więcej informacji, zobacz Konfiguracja na platformie ASP.NET Core.
  • Program.cs: zawiera punkt wejścia usługi gRPC. Aby uzyskać więcej informacji, zobacz Host ogólny platformy ASP.NET Core.
  • Startup.cs: zawiera kod, który konfiguruje zachowanie aplikacji. Aby uzyskać więcej informacji, zobacz Uruchamianie aplikacji.

Tworzenie klienta gRPC w aplikacji konsolowej platformy .NET

  • Otwórz drugie wystąpienie programu Visual Studio i wybierz pozycję Utwórz nowy projekt.
  • W oknie dialogowym Tworzenie nowego projektu wybierz pozycję Aplikacja konsolowa (.NET Core) i wybierz pozycję Dalej.
  • W polu tekstowym Nazwa projektu wprowadź ciąg GrpcGreeterClient i wybierz pozycję Utwórz.

Dodawanie wymaganych pakietów

Projekt klienta gRPC wymaga następujących pakietów:

Zainstaluj pakiety przy użyciu konsoli Menedżer pakietów (PMC) lub zarządzania pakietami NuGet.

Opcja PMC instalowania pakietów

  • W programie Visual Studio wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola

  • W oknie Menedżer pakietów Konsola uruchom polecenie cd GrpcGreeterClient , aby zmienić katalogi na folder zawierający GrpcGreeterClient.csproj pliki.

  • Uruchom następujące polecenia:

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

Opcja Zarządzaj pakietami NuGet w celu zainstalowania pakietów

  • Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań> Zarządzaj pakietami NuGet.
  • Wybierz kartę Przeglądaj.
  • Wprowadź ciąg Grpc.Net.Client w polu wyszukiwania.
  • Wybierz pakiet Grpc.Net.Client z karty Przeglądaj i wybierz pozycję Zainstaluj.
  • Powtórz dla Google.Protobuf i Grpc.Tools.

Dodaj greet.proto

  • Utwórz folder Protos w projekcie klienta gRPC.

  • Skopiuj plik Protos\greet.proto z usługi gRPC Greeter do folderu Protos w projekcie klienta gRPC.

  • Zaktualizuj przestrzeń nazw wewnątrz greet.proto pliku do przestrzeni nazw projektu:

    option csharp_namespace = "GrpcGreeterClient";
    
  • GrpcGreeterClient.csproj Edytuj plik projektu:

    Kliknij prawym przyciskiem myszy projekt i wybierz polecenie Edytuj plik projektu.


  • Dodaj grupę elementów z elementem odwołującym <Protobuf> się do pliku greet.proto :

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

Tworzenie klienta powitania

  • Skompiluj projekt klienta, aby utworzyć typy w GrpcGreeterClient przestrzeni nazw.

Uwaga

Typy GrpcGreeterClient są generowane automatycznie przez proces kompilacji. Pakiet narzędzi Grpc.Tools generuje następujące pliki na podstawie pliku greet.proto :

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: kod buforu protokołu, który wypełnia, serializuje i pobiera typy komunikatów żądania i odpowiedzi.
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: zawiera wygenerowane klasy klienta.

Aby uzyskać więcej informacji na temat zasobów języka C# generowanych automatycznie przez narzędzia Grpc.Tools, zobacz usługi gRPC z elementami C#: Wygenerowane zasoby języka C#.

Zaktualizuj plik klienta Program.cs gRPC przy użyciu następującego kodu:

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 zawiera punkt wejścia i logikę klienta gRPC.

Klient greeter jest tworzony przez:

  • Utworzenie wystąpienia zawierającego GrpcChannel informacje dotyczące tworzenia połączenia z usługą gRPC.
  • Za pomocą polecenia GrpcChannel , aby skonstruować 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 wywołuje metodę asynchroniczną SayHello . Zostanie wyświetlony wynik SayHello wywołania:

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

Testowanie klienta gRPC za pomocą usługi gRPC Greeter

  • W usłudze Greeter naciśnij klawisz Ctrl+F5 , aby uruchomić serwer bez debugera.
  • W projekcie GrpcGreeterClient naciśnij klawisz Ctrl+F5 , aby uruchomić klienta bez debugera.

Klient wysyła powitanie do usługi z komunikatem zawierającym jego nazwę GreeterClient. Usługa wysyła komunikat "Hello GreeterClient" jako odpowiedź. Odpowiedź "Hello GreeterClient" jest wyświetlana w wierszu polecenia:

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

Usługa gRPC rejestruje szczegóły pomyślnego wywołania w dziennikach zapisanych w wierszu polecenia:

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

Uwaga

Kod w tym artykule wymaga certyfikatu dewelopera ASP.NET Core HTTPS w celu zabezpieczenia usługi gRPC. Jeśli klient gRPC platformy .NET zakończy się niepowodzeniem z komunikatem The remote certificate is invalid according to the validation procedure. lub The SSL connection could not be established., certyfikat dewelopera nie jest zaufany. Aby rozwiązać ten problem, zobacz Wywoływanie usługi gRPC z niezaufanym/nieprawidłowym certyfikatem.

Następne kroki