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
Program Visual Studio 2022 z pakietem roboczym tworzenia aplikacji ASP.NET i aplikacji internetowych.
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 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:
Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.
Zostanie wyświetlone następujące okno dialogowe:
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 jakhttp://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\launchSettings.json projektu usługi gRPC.
Sprawdzanie plików projektu
Pliki projektu GrpcGreeter :
Protos/greet.proto
: definiuje gRPCGreeter
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:- Punkt wejścia usługi gRPC. Aby uzyskać więcej informacji, zobacz Host ogólny platformy ASP.NET Core.
- 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ę 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:
- Grpc.Net.Client, który zawiera klienta platformy .NET Core.
- Google.Protobuf, który zawiera interfejsy API komunikatów protobuf dla języka C#.
- Grpc.Tools, które zawierają obsługę narzędzi języka C# dla plików protobuf. Pakiet narzędzi nie jest wymagany w czasie wykonywania, więc zależność jest oznaczona jako
PrivateAssets="All"
.
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ącyGrpcGreeterClient.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
iGrpc.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 numerem7042
portu określonym wProperties/launchSettings.json
projekcieGrpcGreeter
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
Ctrl+F5
, aby uruchomić serwer bez debugera. - W projekcie
GrpcGreeterClient
naciśnijCtrl+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
Program Visual Studio 2022 z pakietem roboczym tworzenia aplikacji ASP.NET i aplikacji internetowych.
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 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:
Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.
Zostanie wyświetlone następujące okno dialogowe:
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 jakhttp://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\launchSettings.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 gRPCGreeter
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:- Punkt wejścia usługi gRPC. Aby uzyskać więcej informacji, zobacz Host ogólny platformy ASP.NET Core.
- 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, 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:
- Grpc.Net.Client, który zawiera klienta platformy .NET Core.
- Google.Protobuf, który zawiera interfejsy API komunikatów protobuf dla języka C#.
- Grpc.Tools, które zawierają obsługę narzędzi języka C# dla plików protobuf. Pakiet narzędzi nie jest wymagany w czasie wykonywania, więc zależność jest oznaczona jako
PrivateAssets="All"
.
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ącyGrpcGreeterClient.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
iGrpc.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 numerem7042
portu określonym wProperties/launchSettings.json
projekcieGrpcGreeter
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
Ctrl+F5
, aby uruchomić serwer bez debugera. - W projekcie
GrpcGreeterClient
naciśnijCtrl+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
- Program Visual Studio 2022 z pakietem roboczym tworzenia aplikacji ASP.NET i aplikacji internetowych.
- Zestaw SDK dla platformy .NET 6.0
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 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:
Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.
Zostanie wyświetlone następujące okno dialogowe:
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 jakhttp://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\launchSettings.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 gRPCGreeter
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:- Punkt wejścia usługi gRPC. Aby uzyskać więcej informacji, zobacz Host ogólny platformy ASP.NET Core.
- 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, 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:
- Grpc.Net.Client, który zawiera klienta platformy .NET Core.
- Google.Protobuf, który zawiera interfejsy API komunikatów protobuf dla języka C#.
- Grpc.Tools, które zawierają obsługę narzędzi języka C# dla plików protobuf. Pakiet narzędzi nie jest wymagany w czasie wykonywania, więc zależność jest oznaczona jako
PrivateAssets="All"
.
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ącyGrpcGreeterClient.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
iGrpc.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 numerem7042
portu określonym wProperties/launchSettings.json
projekcieGrpcGreeter
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
Ctrl+F5
, aby uruchomić serwer bez debugera. - W projekcie
GrpcGreeterClient
naciśnijCtrl+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
- Program Visual Studio 2019 16.8 lub nowsza wersja z pakietem roboczym tworzenia aplikacji ASP.NET. i aplikacji internetowych
- Zestaw .NET SDK 5.0
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 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:
Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.
Zostanie wyświetlone następujące okno dialogowe:
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ładexample.com
. Wynika to z faktulocalhost
, ż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:
- Grpc.Net.Client, który zawiera klienta platformy .NET Core.
- Google.Protobuf, który zawiera interfejsy API komunikatów protobuf dla języka C#.
- Grpc.Tools, który zawiera obsługę narzędzi języka C# dla plików protobuf. Pakiet narzędzi nie jest wymagany w czasie wykonywania, więc zależność jest oznaczona jako
PrivateAssets="All"
.
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ącyGrpcGreeterClient.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
iGrpc.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
Ctrl+F5
, aby uruchomić serwer bez debugera. - W projekcie
GrpcGreeterClient
naciśnijCtrl+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
- Program Visual Studio 2019 16.4 lub nowsza wersja z pakietem roboczym tworzenia aplikacji ASP.NET. i aplikacji internetowych
- Zestaw .NET Core SDK 3.1
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:
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 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:
Wybierz pozycję Tak , jeśli ufasz certyfikatowi SSL usług IIS Express.
Zostanie wyświetlone następujące okno dialogowe:
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ładexample.com
. Wynika to z faktulocalhost
, ż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:
- Grpc.Net.Client, który zawiera klienta platformy .NET Core.
- Google.Protobuf, który zawiera interfejsy API komunikatów protobuf dla języka C#.
- Grpc.Tools, który zawiera obsługę narzędzi języka C# dla plików protobuf. Pakiet narzędzi nie jest wymagany w czasie wykonywania, więc zależność jest oznaczona jako
PrivateAssets="All"
.
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ącyGrpcGreeterClient.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
iGrpc.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
Ctrl+F5
, aby uruchomić serwer bez debugera. - W projekcie
GrpcGreeterClient
naciśnijCtrl+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.