Руководство по созданию клиента и сервера gRPC в ASP.NET Core

В этом руководстве показано, как создать клиент gRPC в .NET Core и сервер gRPC ASP.NET Core. В итоге вы получите клиент gRPC, который взаимодействует со службой Greeter gRPC.

Изучив это руководство, вы:

  • Создание сервера gRPC.
  • Создание клиента gRPC.
  • Тестирование клиента gRPC с помощью службы Greeter gRPC.

Необходимые компоненты

  • Visual Studio 2022 с рабочей нагрузкой ASP.NET и веб-разработка.

    Рабочие нагрузки установщика VS22

Создание службы gRPC

  • Запустите Visual Studio 2022 и выберите новый проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Для проекта необходимо установить имя GrpcGreeter, чтобы при копировании и вставке кода совпадали пространства имен.
  • Выберите Далее.
  • В диалоговом окне "Дополнительные сведения" выберите .NET 8.0 (долгосрочная поддержка) и нажмите кнопку "Создать".

Запуск службы

  • Нажмите клавиши CTRL+F5, чтобы выполнить запуск без отладчика.

    Visual Studio отображает следующее диалоговое окно, если проект еще не настроен для использования SSL:

    Этот проект настроен для использования SSL. Вы можете сделать самозаверяющий сертификат, созданный IIS Express, доверенным, чтобы не получать предупреждения SSL в браузере. Сделать SSL-сертификат IIS Express доверенным?

    Выберите Да, чтобы сделать SSL-сертификат IIS Express доверенным.

    Отобразится следующее диалоговое окно.

    Диалоговое окно

    Выберите Да, если согласны доверять сертификату разработки.

    Сведения о доверии к браузеру Firefox см. в разделе Ошибка сертификата браузера Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Запускает сервер Kestrel.
    • запускает браузер;
    • переходит к адресу http://localhost:port, например http://localhost:7042.
      • port: это номер порта, назначенный для приложения случайным образом.
      • localhost: это стандартное имя узла для локального компьютера. Localhost обслуживает только веб-запросы с локального компьютера.

В журналах показана служба, ожидающая передачи данных на https://localhost:<port>, где <port> — это номер порта localhost, назначаемый случайным образом при создании проекта и задаваемый в 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

Примечание.

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта localhost службы gRPC назначается случайным образом при создании проекта и задается в файле Properties\launchSettings.json проекта службы gRPC.

Анализ файлов проекта

Файлы проекта GrpcGreeter:

  • Protos/greet.proto: определяет службу gRPC Greeter и используется для создания ресурсов сервера gRPC. Дополнительные сведения см. в разделе Введение в gRPC.
  • Папка Services: содержит реализацию службы Greeter.
  • appSettings.json: содержит данные конфигурации, включая протокол, используемый в Kestrel. Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.
  • Program.cs, содержащий следующее:

Создание клиента gRPC в консольном приложении .NET

  • Откройте второй экземпляр Visual Studio и выберите новый проект.
  • В диалоговом окне "Создание проекта" выберите консольное приложение и нажмите кнопку "Далее".
  • В текстовое поле Имя проекта введите GrpcGreeterClient и нажмите Далее.
  • В диалоговом окне "Дополнительные сведения" выберите .NET 8.0 (долгосрочная поддержка) и нажмите кнопку "Создать".

Добавьте необходимые пакеты NuGet

Для клиентского проекта gRPC требуются следующие пакеты NuGet:

  • Grpc.Net.Client, который содержит клиент .NET Core.
  • Google.Protobuf, который содержит API сообщений protobuf для C#;
  • Grpc.Tools, который содержит поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

Установка пакетов с помощью консоли диспетчера пакетов (PMC) или управления пакетами NuGet.

Установка пакетов с помощью консоли диспетчера пакетов

  • В Visual Studio выберите пункты меню Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  • В окне консоли диспетчер пакетов выполните командуcd GrpcGreeterClient, чтобы изменить каталоги в папку, содержащую GrpcGreeterClient.csproj файлы.

  • Выполните следующие команды:

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

Установка пакетов с помощью раздела управления пакетами NuGet

  • Щелкните правой кнопкой мыши проект в обозревателе решений>Управление пакетами NuGet.
  • Откройте вкладку Browse (Обзор).
  • В поле поиска введите Grpc.Net.Client.
  • Выберите пакет Grpc.Net.Client на вкладке Обзор и нажмите кнопку Установить.
  • Повторите для Google.Protobuf и Grpc.Tools.

Добавление greet.proto

  • Создайте папку Protos в клиентском проекте gRPC.

  • Скопируйте файл Protos\greet.proto из службы Greeter gRPC в папку Protos проекта клиента gRPC.

  • Измените пространство имен в файле greet.proto на пространство имен проекта:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Измените файл проекта GrpcGreeterClient.csproj:

Щелкните проект правой кнопкой мыши и выберите Изменить файл проекта.

  • Добавьте группу элементов с элементом <Protobuf>, ссылающимся на файл greet.proto:

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

Создание клиента Greeter

  • Скомпилируйте клиентский проект, чтобы создать типы в пространстве имен GrpcGreeterClient.

Примечание.

Типы GrpcGreeterClient создаются автоматически в процессе сборки. Пакет инструментов Grpc.Tools создает следующие файлы на основе файла greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: код для буфера протокола, который заполняет, сериализует и извлекает типы сообщений для запроса и ответа;
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: содержит созданные клиентские классы.

Дополнительные сведения о ресурсах C#, автоматически создаваемых Grpc.Tools, см. в разделе Службы gRPC и C#: создаваемые ресурсы C#.

  • Добавьте в файл Program.cs клиента gRPC следующий код.

    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();
    
  • В выделенном коде выше замените номер порта localhost 7042 на номер порта HTTPS, указанный в файле Properties/launchSettings.json проекта службы GrpcGreeter.

Program.cs содержит точку входа и логику для клиента gRPC.

Клиент Greeter создается следующим образом:

  • Создание экземпляра GrpcChannel со сведениями для создания подключения к службе gRPC.
  • Использование GrpcChannel для создания клиента 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();

Клиент Greeter вызывает асинхронный метод SayHello. Отображается результат вызова SayHello:

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

Тестирование клиента gRPC с помощью службы Greeter gRPC

Обновите файл, добавив следующие выделенные appsettings.Development.json строки:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • В службе Greeter нажмите Ctrl+F5 для запуска сервера без отладчика.
  • В проекте GrpcGreeterClient нажмите Ctrl+F5 для запуска клиента без отладчика.

Клиент отправляет приветствие в службу с сообщением, в котором содержится его имя GreeterClient. Служба отправляет сообщение "Hello GreeterClient" в качестве ответа. Ответ "Hello GreeterClient" отображается в командной строке:

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

Служба gRPC записывает сведения об успешном вызове в журналы, что отображается в командной строке:

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

Примечание.

Чтобы применить код, описанный в этой статье, требуется сертификат разработки HTTPS ASP.NET Core для защиты службы gRPC. Если .NET gRPC возвращает сообщение The remote certificate is invalid according to the validation procedure. или The SSL connection could not be established., это значит, что сертификат разработки не является доверенным. Чтобы исправить эту проблему, см. Вызов службы gRPC с использованием ненадежного или недействительного сертификата.

Следующие шаги

В этом руководстве показано, как создать клиент gRPC в .NET Core и сервер gRPC ASP.NET Core. В итоге вы получите клиент gRPC, который взаимодействует со службой Greeter gRPC.

Изучив это руководство, вы:

  • Создание сервера gRPC.
  • Создание клиента gRPC.
  • Тестирование клиента gRPC с помощью службы Greeter gRPC.

Необходимые компоненты

  • Visual Studio 2022 с рабочей нагрузкой ASP.NET и веб-разработка.

    Рабочие нагрузки установщика VS22

Создание службы gRPC

  • Запустите Visual Studio 2022 и нажмите Создать проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Для проекта необходимо установить имя GrpcGreeter, чтобы при копировании и вставке кода совпадали пространства имен.
  • Выберите Далее.
  • В диалоговом окне Дополнительные сведения выберите .NET 6.0 (долгосрочная поддержка) и щелкните Создать.

Запуск службы

  • Нажмите клавиши CTRL+F5, чтобы выполнить запуск без отладчика.

    Visual Studio отображает следующее диалоговое окно, если проект еще не настроен для использования SSL:

    Этот проект настроен для использования SSL. Вы можете сделать самозаверяющий сертификат, созданный IIS Express, доверенным, чтобы не получать предупреждения SSL в браузере. Сделать SSL-сертификат IIS Express доверенным?

    Выберите Да, чтобы сделать SSL-сертификат IIS Express доверенным.

    Отобразится следующее диалоговое окно.

    Диалоговое окно

    Выберите Да, если согласны доверять сертификату разработки.

    Сведения о доверии к браузеру Firefox см. в разделе Ошибка сертификата браузера Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Запускает сервер Kestrel.
    • запускает браузер;
    • переходит к адресу http://localhost:port, например http://localhost:7042.
      • port: это номер порта, назначенный для приложения случайным образом.
      • localhost: это стандартное имя узла для локального компьютера. Localhost обслуживает только веб-запросы с локального компьютера.

В журналах показана служба, ожидающая передачи данных на https://localhost:<port>, где <port> — это номер порта localhost, назначаемый случайным образом при создании проекта и задаваемый в 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

Примечание.

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта localhost службы gRPC назначается случайным образом при создании проекта и задается в файле Properties\launchSettings.json проекта службы gRPC.

macOS не поддерживает ASP.NET Core gRPC с TLS. Для успешного запуска служб gRPC в macOS требуется дополнительная настройка. Дополнительные сведения см. в статье Не удается запустить приложение ASP.NET Core gRPC в macOS.

Анализ файлов проекта

Файлы проекта GrpcGreeter:

  • Protos/greet.proto: определяет службу gRPC Greeter и используется для создания ресурсов сервера gRPC. Дополнительные сведения см. в разделе Введение в gRPC.
  • Папка Services: содержит реализацию службы Greeter.
  • appSettings.json: содержит данные конфигурации, включая протокол, используемый в Kestrel. Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.
  • Program.cs, содержащий следующее:

Создание клиента gRPC в консольном приложении .NET

  • Откройте второй экземпляр Visual Studio и щелкните Создать проект.
  • В диалоговом окне Создание проекта выберите Консольное приложение и нажмите Далее.
  • В текстовое поле Имя проекта введите GrpcGreeterClient и нажмите Далее.
  • В диалоговом окне Дополнительные сведения выберите .NET 6.0 (долгосрочная поддержка) и щелкните Создать.

Добавьте необходимые пакеты NuGet

Для клиентского проекта gRPC требуются следующие пакеты NuGet:

  • Grpc.Net.Client, который содержит клиент .NET Core.
  • Google.Protobuf, который содержит API сообщений protobuf для C#;
  • Grpc.Tools, который содержит поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

Установка пакетов с помощью консоли диспетчера пакетов (PMC) или управления пакетами NuGet.

Установка пакетов с помощью консоли диспетчера пакетов

  • В Visual Studio выберите пункты меню Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  • В окне консоли диспетчер пакетов выполните командуcd GrpcGreeterClient, чтобы изменить каталоги в папку, содержащую GrpcGreeterClient.csproj файлы.

  • Выполните следующие команды:

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

Установка пакетов с помощью раздела управления пакетами NuGet

  • Щелкните правой кнопкой мыши проект в обозревателе решений>Управление пакетами NuGet.
  • Откройте вкладку Browse (Обзор).
  • В поле поиска введите Grpc.Net.Client.
  • Выберите пакет Grpc.Net.Client на вкладке Обзор и нажмите кнопку Установить.
  • Повторите для Google.Protobuf и Grpc.Tools.

Добавление greet.proto

  • Создайте папку Protos в клиентском проекте gRPC.

  • Скопируйте файл Protos\greet.proto из службы Greeter gRPC в папку Protos проекта клиента gRPC.

  • Измените пространство имен в файле greet.proto на пространство имен проекта:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Измените файл проекта GrpcGreeterClient.csproj:

Щелкните проект правой кнопкой мыши и выберите Изменить файл проекта.

  • Добавьте группу элементов с элементом <Protobuf>, ссылающимся на файл greet.proto:

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

Создание клиента Greeter

  • Скомпилируйте клиентский проект, чтобы создать типы в пространстве имен GrpcGreeterClient.

Примечание.

Типы GrpcGreeterClient создаются автоматически в процессе сборки. Пакет инструментов Grpc.Tools создает следующие файлы на основе файла greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: код для буфера протокола, который заполняет, сериализует и извлекает типы сообщений для запроса и ответа;
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: содержит созданные клиентские классы.

Дополнительные сведения о ресурсах C#, автоматически создаваемых Grpc.Tools, см. в разделе Службы gRPC и C#: создаваемые ресурсы C#.

  • Добавьте в файл Program.cs клиента gRPC следующий код.

    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();
    
  • В выделенном коде выше замените номер порта localhost 7042 на номер порта HTTPS, указанный в файле Properties/launchSettings.json проекта службы GrpcGreeter.

Program.cs содержит точку входа и логику для клиента gRPC.

Клиент Greeter создается следующим образом:

  • Создание экземпляра GrpcChannel со сведениями для создания подключения к службе gRPC.
  • Использование GrpcChannel для создания клиента 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();

Клиент Greeter вызывает асинхронный метод SayHello. Отображается результат вызова SayHello:

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

Тестирование клиента gRPC с помощью службы Greeter gRPC

Обновите файл, добавив следующие выделенные appsettings.Development.json строки:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
      ,"Microsoft.AspNetCore.Hosting": "Information",
      "Microsoft.AspNetCore.Routing.EndpointMiddleware": "Information"
    }
  }
}
  • В службе Greeter нажмите Ctrl+F5 для запуска сервера без отладчика.
  • В проекте GrpcGreeterClient нажмите Ctrl+F5 для запуска клиента без отладчика.

Клиент отправляет приветствие в службу с сообщением, в котором содержится его имя GreeterClient. Служба отправляет сообщение "Hello GreeterClient" в качестве ответа. Ответ "Hello GreeterClient" отображается в командной строке:

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

Служба gRPC записывает сведения об успешном вызове в журналы, что отображается в командной строке:

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

Примечание.

Чтобы применить код, описанный в этой статье, требуется сертификат разработки HTTPS ASP.NET Core для защиты службы gRPC. Если .NET gRPC возвращает сообщение The remote certificate is invalid according to the validation procedure. или The SSL connection could not be established., это значит, что сертификат разработки не является доверенным. Чтобы исправить эту проблему, см. Вызов службы gRPC с использованием ненадежного или недействительного сертификата.

Следующие шаги

В этом руководстве показано, как создать клиент gRPC в .NET Core и сервер gRPC ASP.NET Core. В итоге вы получите клиент gRPC, который взаимодействует со службой Greeter gRPC.

Изучив это руководство, вы:

  • Создание сервера gRPC.
  • Создание клиента gRPC.
  • Тестирование клиента gRPC с помощью службы Greeter gRPC.

Необходимые компоненты

Создание службы gRPC

  • Запустите Visual Studio 2022 и нажмите Создать проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Для проекта необходимо установить имя GrpcGreeter, чтобы при копировании и вставке кода совпадали пространства имен.
  • Выберите Далее.
  • В диалоговом окне Дополнительные сведения выберите .NET 6.0 (долгосрочная поддержка) и щелкните Создать.

Запуск службы

  • Нажмите клавиши CTRL+F5, чтобы выполнить запуск без отладчика.

    Visual Studio отображает следующее диалоговое окно, если проект еще не настроен для использования SSL:

    Этот проект настроен для использования SSL. Вы можете сделать самозаверяющий сертификат, созданный IIS Express, доверенным, чтобы не получать предупреждения SSL в браузере. Сделать SSL-сертификат IIS Express доверенным?

    Выберите Да, чтобы сделать SSL-сертификат IIS Express доверенным.

    Отобразится следующее диалоговое окно.

    Диалоговое окно

    Выберите Да, если согласны доверять сертификату разработки.

    Сведения о доверии к браузеру Firefox см. в разделе Ошибка сертификата браузера Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio:

    • Запускает сервер Kestrel.
    • запускает браузер;
    • переходит к адресу http://localhost:port, например http://localhost:7042.
      • port: это номер порта, назначенный для приложения случайным образом.
      • localhost: это стандартное имя узла для локального компьютера. Localhost обслуживает только веб-запросы с локального компьютера.

В журналах показана служба, ожидающая передачи данных на https://localhost:<port>, где <port> — это номер порта localhost, назначаемый случайным образом при создании проекта и задаваемый в 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

Примечание.

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта localhost службы gRPC назначается случайным образом при создании проекта и задается в файле Properties\launchSettings.json проекта службы gRPC.

macOS не поддерживает ASP.NET Core gRPC с TLS. Для успешного запуска служб gRPC в macOS требуется дополнительная настройка. Дополнительные сведения см. в статье Не удается запустить приложение ASP.NET Core gRPC в macOS.

Анализ файлов проекта

Файлы проекта GrpcGreeter:

  • Protos/greet.proto: определяет службу gRPC Greeter и используется для создания ресурсов сервера gRPC. Дополнительные сведения см. в разделе Введение в gRPC.
  • Папка Services: содержит реализацию службы Greeter.
  • appSettings.json: содержит данные конфигурации, включая протокол, используемый в Kestrel. Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.
  • Program.cs, содержащий следующее:

Создание клиента gRPC в консольном приложении .NET

  • Откройте второй экземпляр Visual Studio и щелкните Создать проект.
  • В диалоговом окне Создание проекта выберите Консольное приложение и нажмите Далее.
  • В текстовое поле Имя проекта введите GrpcGreeterClient и нажмите Далее.
  • В диалоговом окне Дополнительные сведения выберите .NET 6.0 (долгосрочная поддержка) и щелкните Создать.

Добавьте необходимые пакеты NuGet

Для клиентского проекта gRPC требуются следующие пакеты NuGet:

  • Grpc.Net.Client, который содержит клиент .NET Core.
  • Google.Protobuf, который содержит API сообщений protobuf для C#;
  • Grpc.Tools, который содержит поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

Установка пакетов с помощью консоли диспетчера пакетов (PMC) или управления пакетами NuGet.

Установка пакетов с помощью консоли диспетчера пакетов

  • В Visual Studio выберите пункты меню Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  • В окне консоли диспетчер пакетов выполните командуcd GrpcGreeterClient, чтобы изменить каталоги в папку, содержащую GrpcGreeterClient.csproj файлы.

  • Выполните следующие команды:

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

Установка пакетов с помощью раздела управления пакетами NuGet

  • Щелкните правой кнопкой мыши проект в обозревателе решений>Управление пакетами NuGet.
  • Откройте вкладку Browse (Обзор).
  • В поле поиска введите Grpc.Net.Client.
  • Выберите пакет Grpc.Net.Client на вкладке Обзор и нажмите кнопку Установить.
  • Повторите для Google.Protobuf и Grpc.Tools.

Добавление greet.proto

  • Создайте папку Protos в клиентском проекте gRPC.

  • Скопируйте файл Protos\greet.proto из службы Greeter gRPC в папку Protos проекта клиента gRPC.

  • Измените пространство имен в файле greet.proto на пространство имен проекта:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Измените файл проекта GrpcGreeterClient.csproj:

Щелкните проект правой кнопкой мыши и выберите Изменить файл проекта.

  • Добавьте группу элементов с элементом <Protobuf>, ссылающимся на файл greet.proto:

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

Создание клиента Greeter

  • Скомпилируйте клиентский проект, чтобы создать типы в пространстве имен GrpcGreeterClient.

Примечание.

Типы GrpcGreeterClient создаются автоматически в процессе сборки. Пакет инструментов Grpc.Tools создает следующие файлы на основе файла greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: код для буфера протокола, который заполняет, сериализует и извлекает типы сообщений для запроса и ответа;
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: содержит созданные клиентские классы.

Дополнительные сведения о ресурсах C#, автоматически создаваемых Grpc.Tools, см. в разделе Службы gRPC и C#: создаваемые ресурсы C#.

  • Добавьте в файл Program.cs клиента gRPC следующий код.

    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();
    
  • В выделенном коде выше замените номер порта localhost 7042 на номер порта HTTPS, указанный в файле Properties/launchSettings.json проекта службы GrpcGreeter.

Program.cs содержит точку входа и логику для клиента gRPC.

Клиент Greeter создается следующим образом:

  • Создание экземпляра GrpcChannel со сведениями для создания подключения к службе gRPC.
  • Использование GrpcChannel для создания клиента 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();

Клиент Greeter вызывает асинхронный метод SayHello. Отображается результат вызова SayHello:

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

Тестирование клиента gRPC с помощью службы Greeter gRPC

  • В службе Greeter нажмите Ctrl+F5 для запуска сервера без отладчика.
  • В проекте GrpcGreeterClient нажмите Ctrl+F5 для запуска клиента без отладчика.

Клиент отправляет приветствие в службу с сообщением, в котором содержится его имя GreeterClient. Служба отправляет сообщение "Hello GreeterClient" в качестве ответа. Ответ "Hello GreeterClient" отображается в командной строке:

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

Служба gRPC записывает сведения об успешном вызове в журналы, что отображается в командной строке:

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

appsettings.Development.json Обновите файл, добавив следующие строки:

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

Примечание.

Чтобы применить код, описанный в этой статье, требуется сертификат разработки HTTPS ASP.NET Core для защиты службы gRPC. Если .NET gRPC возвращает сообщение The remote certificate is invalid according to the validation procedure. или The SSL connection could not be established., это значит, что сертификат разработки не является доверенным. Чтобы исправить эту проблему, см. Вызов службы gRPC с использованием ненадежного или недействительного сертификата.

Следующие шаги

В этом руководстве показано, как создать клиент gRPC в .NET Core и сервер gRPC ASP.NET Core.

В итоге вы получите клиент gRPC, который взаимодействует со службой Greeter gRPC.

Просмотреть или скачать пример кода (описание скачивания).

Изучив это руководство, вы:

  • Создание сервера gRPC.
  • Создание клиента gRPC.
  • Тестирование клиента gRPC с помощью службы Greeter gRPC.

Необходимые компоненты

Создание службы gRPC

  • Откройте Visual Studio и выберите Создать проект.
  • В диалоговом окне Создание проекта выберите Служба gRPC и нажмите кнопку Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Для проекта необходимо установить имя GrpcGreeter, чтобы при копировании и вставке кода совпадали пространства имен.
  • Выберите Далее.
  • В диалоговом окне Дополнительные сведения выберите .NET 5.0 в раскрывающемся поле Целевая платформа.
  • Нажмите кнопку создания.

Запуск службы

  • Нажмите клавиши CTRL+F5, чтобы выполнить запуск без отладчика.

    Visual Studio отображает следующее диалоговое окно, если проект еще не настроен для использования SSL:

    Этот проект настроен для использования SSL. Вы можете сделать самозаверяющий сертификат, созданный IIS Express, доверенным, чтобы не получать предупреждения SSL в браузере. Сделать SSL-сертификат IIS Express доверенным?

    Выберите Да, чтобы сделать SSL-сертификат IIS Express доверенным.

    Отобразится следующее диалоговое окно.

    Диалоговое окно

    Выберите Да, если согласны доверять сертификату разработки.

    Сведения о доверии к браузеру Firefox см. в разделе Ошибка сертификата браузера Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio запускает IIS Express, а затем приложение. В адресной строке указывается localhost:port#, а не что-либо типа example.com. Это связано с тем, что localhost — стандартное имя узла для локального компьютера. Localhost обслуживает только веб-запросы с локального компьютера. Когда Visual Studio создает веб-проект, для веб-сервера используется случайный порт.

В журналах отобразится служба, которая ожидает передачи данных через 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

Примечание.

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу.

macOS не поддерживает ASP.NET Core gRPC с TLS. Для успешного запуска служб gRPC в macOS требуется дополнительная настройка. Дополнительные сведения см. в статье Не удается запустить приложение ASP.NET Core gRPC в macOS.

Анализ файлов проекта

Файлы проекта GrpcGreeter:

  • greet.proto: файл Protos/greet.proto определяет службу gRPC Greeter и используется для создания ресурсов сервера gRPC. Дополнительные сведения см. в разделе Введение в gRPC.
  • Папка Services: содержит реализацию службы Greeter.
  • appsettings.json: содержит данные конфигурации, например протокол, используемый Kestrel. Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.
  • Program.cs: содержит точку входа для службы gRPC. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core.
  • Startup.cs: содержит код, определяющий поведение приложения. Дополнительные сведения: Запуск приложения.

Создание клиента gRPC в консольном приложении .NET

  • Откройте второй экземпляр Visual Studio и щелкните Создать проект.
  • В диалоговом окне Создание проекта выберите Консольное приложение (.NET Core) и щелкните Далее.
  • В текстовое поле Имя проекта введите GrpcGreeterClient и щелкните Создать.

Добавление необходимых пакетов

Для клиентского проекта gRPC требуются следующие пакеты:

  • Grpc.Net.Client, который содержит клиент .NET Core.
  • Google.Protobuf, который содержит API сообщений protobuf для C#;
  • Grpc.Tools, который содержит поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

Установка пакетов с помощью консоли диспетчера пакетов (PMC) или управления пакетами NuGet.

Установка пакетов с помощью консоли диспетчера пакетов

  • В Visual Studio выберите пункты меню Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  • В окне консоли диспетчер пакетов выполните командуcd GrpcGreeterClient, чтобы изменить каталоги в папку, содержащую GrpcGreeterClient.csproj файлы.

  • Выполните следующие команды:

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

Установка пакетов с помощью раздела управления пакетами NuGet

  • Щелкните правой кнопкой мыши проект в обозревателе решений>Управление пакетами NuGet.
  • Откройте вкладку Browse (Обзор).
  • В поле поиска введите Grpc.Net.Client.
  • Выберите пакет Grpc.Net.Client на вкладке Обзор и нажмите кнопку Установить.
  • Повторите для Google.Protobuf и Grpc.Tools.

Добавление greet.proto

  • Создайте папку Protos в клиентском проекте gRPC.

  • Скопируйте файл Protos\greet.proto из службы Greeter gRPC в папку Protos проекта клиента gRPC.

  • Измените пространство имен в файле greet.proto на пространство имен проекта:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Измените файл проекта GrpcGreeterClient.csproj:

    Щелкните проект правой кнопкой мыши и выберите Изменить файл проекта.


  • Добавьте группу элементов с элементом <Protobuf>, ссылающимся на файл greet.proto:

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

Создание клиента Greeter

  • Скомпилируйте клиентский проект, чтобы создать типы в пространстве имен GrpcGreeterClient.

Примечание.

Типы GrpcGreeterClient создаются автоматически в процессе сборки. Пакет инструментов Grpc.Tools создает следующие файлы на основе файла greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: код для буфера протокола, который заполняет, сериализует и извлекает типы сообщений для запроса и ответа;
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: содержит созданные клиентские классы.

Дополнительные сведения о ресурсах C#, автоматически создаваемых Grpc.Tools, см. в разделе Службы gRPC и C#: создаваемые ресурсы C#.

  • Обновите файл клиента Program.cs gRPC следующим кодом:

    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 содержит точку входа и логику для клиента gRPC.

Клиент Greeter создается следующим образом:

  • Создание экземпляра GrpcChannel со сведениями для создания подключения к службе gRPC.
  • Использование GrpcChannel для создания клиента 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();
}

Клиент Greeter вызывает асинхронный метод SayHello. Отображается результат вызова SayHello:

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

Тестирование клиента gRPC с помощью службы Greeter gRPC

  • В службе Greeter нажмите Ctrl+F5 для запуска сервера без отладчика.
  • В проекте GrpcGreeterClient нажмите Ctrl+F5 для запуска клиента без отладчика.

Клиент отправляет приветствие в службу с сообщением, в котором содержится его имя GreeterClient. Служба отправляет сообщение "Hello GreeterClient" в качестве ответа. Ответ "Hello GreeterClient" отображается в командной строке:

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

Служба gRPC записывает сведения об успешном вызове в журналы, что отображается в командной строке:

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

Примечание.

Чтобы применить код, описанный в этой статье, требуется сертификат разработки HTTPS ASP.NET Core для защиты службы gRPC. Если .NET gRPC возвращает сообщение The remote certificate is invalid according to the validation procedure. или The SSL connection could not be established., это значит, что сертификат разработки не является доверенным. Чтобы исправить эту проблему, см. Вызов службы gRPC с использованием ненадежного или недействительного сертификата.

Следующие шаги

В этом руководстве показано, как создать клиент gRPC в .NET Core и сервер gRPC ASP.NET Core.

В итоге вы получите клиент gRPC, который взаимодействует со службой Greeter gRPC.

Просмотреть или скачать пример кода (описание скачивания).

Изучив это руководство, вы:

  • Создание сервера gRPC.
  • Создание клиента gRPC.
  • Тестирование клиента gRPC с помощью службы Greeter gRPC.

Необходимые компоненты

Создание службы gRPC

  • Откройте Visual Studio и выберите Создать проект. или в меню Файл в Visual Studio выберите Создать>Проект.

  • В диалоговом окне Создание проекта выберите Служба gRPC и нажмите кнопку Далее:

    Диалоговое окно создания нового проекта в Visual Studio

  • Присвойте проекту имя GrpcGreeter. Для проекта необходимо установить имя GrpcGreeter, чтобы при копировании и вставке кода совпадали пространства имен.

  • Нажмите кнопку создания.

  • В диалоговом окне Создать службу gRPC сделайте следующее:

    • Шаблон gRPC Service выбран.
    • Нажмите кнопку создания.

Запуск службы

  • Нажмите клавиши CTRL+F5, чтобы выполнить запуск без отладчика.

    Visual Studio отображает следующее диалоговое окно, если проект еще не настроен для использования SSL:

    Этот проект настроен для использования SSL. Вы можете сделать самозаверяющий сертификат, созданный IIS Express, доверенным, чтобы не получать предупреждения SSL в браузере. Сделать SSL-сертификат IIS Express доверенным?

    Выберите Да, чтобы сделать SSL-сертификат IIS Express доверенным.

    Отобразится следующее диалоговое окно.

    Диалоговое окно

    Выберите Да, если согласны доверять сертификату разработки.

    Сведения о доверии к браузеру Firefox см. в разделе Ошибка сертификата браузера Firefox SEC_ERROR_INADEQUATE_KEY_USAGE.

    Visual Studio запускает IIS Express, а затем приложение. В адресной строке указывается localhost:port#, а не что-либо типа example.com. Это связано с тем, что localhost — стандартное имя узла для локального компьютера. Localhost обслуживает только веб-запросы с локального компьютера. Когда Visual Studio создает веб-проект, для веб-сервера используется случайный порт.

В журналах отобразится служба, которая ожидает передачи данных через 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

Примечание.

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу.

macOS не поддерживает ASP.NET Core gRPC с TLS. Для успешного запуска служб gRPC в macOS требуется дополнительная настройка. Дополнительные сведения см. в статье Не удается запустить приложение ASP.NET Core gRPC в macOS.

Анализ файлов проекта

Файлы проекта GrpcGreeter:

  • greet.proto: файл Protos/greet.proto определяет службу gRPC Greeter и используется для создания ресурсов сервера gRPC. Дополнительные сведения см. в разделе Введение в gRPC.
  • Папка Services: содержит реализацию службы Greeter.
  • appsettings.json: содержит данные конфигурации, например протокол, используемый Kestrel. Дополнительные сведения см. в разделе Конфигурация в ASP.NET Core.
  • Program.cs: содержит точку входа для службы gRPC. Дополнительные сведения см. в статье Универсальный узел .NET в ASP.NET Core.
  • Startup.cs: содержит код, определяющий поведение приложения. Дополнительные сведения: Запуск приложения.

Создание клиента gRPC в консольном приложении .NET

  • Откройте второй экземпляр Visual Studio и щелкните Создать проект.
  • В диалоговом окне Создание проекта выберите Консольное приложение (.NET Core) и щелкните Далее.
  • В текстовое поле Имя проекта введите GrpcGreeterClient и щелкните Создать.

Добавление необходимых пакетов

Для клиентского проекта gRPC требуются следующие пакеты:

  • Grpc.Net.Client, который содержит клиент .NET Core.
  • Google.Protobuf, который содержит API сообщений protobuf для C#;
  • Grpc.Tools, который содержит поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

Установка пакетов с помощью консоли диспетчера пакетов (PMC) или управления пакетами NuGet.

Установка пакетов с помощью консоли диспетчера пакетов

  • В Visual Studio выберите пункты меню Сервис>Диспетчер пакетов NuGet>Консоль диспетчера пакетов.

  • В окне консоли диспетчер пакетов выполните командуcd GrpcGreeterClient, чтобы изменить каталоги в папку, содержащую GrpcGreeterClient.csproj файлы.

  • Выполните следующие команды:

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

Установка пакетов с помощью раздела управления пакетами NuGet

  • Щелкните правой кнопкой мыши проект в обозревателе решений>Управление пакетами NuGet.
  • Откройте вкладку Browse (Обзор).
  • В поле поиска введите Grpc.Net.Client.
  • Выберите пакет Grpc.Net.Client на вкладке Обзор и нажмите кнопку Установить.
  • Повторите для Google.Protobuf и Grpc.Tools.

Добавление greet.proto

  • Создайте папку Protos в клиентском проекте gRPC.

  • Скопируйте файл Protos\greet.proto из службы Greeter gRPC в папку Protos проекта клиента gRPC.

  • Измените пространство имен в файле greet.proto на пространство имен проекта:

    option csharp_namespace = "GrpcGreeterClient";
    
  • Измените файл проекта GrpcGreeterClient.csproj:

    Щелкните проект правой кнопкой мыши и выберите Изменить файл проекта.


  • Добавьте группу элементов с элементом <Protobuf>, ссылающимся на файл greet.proto:

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

Создание клиента Greeter

  • Скомпилируйте клиентский проект, чтобы создать типы в пространстве имен GrpcGreeterClient.

Примечание.

Типы GrpcGreeterClient создаются автоматически в процессе сборки. Пакет инструментов Grpc.Tools создает следующие файлы на основе файла greet.proto:

  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\Greet.cs: код для буфера протокола, который заполняет, сериализует и извлекает типы сообщений для запроса и ответа;
  • GrpcGreeterClient\obj\Debug\[TARGET_FRAMEWORK]\Protos\GreetGrpc.cs: содержит созданные клиентские классы.

Дополнительные сведения о ресурсах C#, автоматически создаваемых Grpc.Tools, см. в разделе Службы gRPC и C#: создаваемые ресурсы C#.

Обновите файл клиента Program.cs gRPC следующим кодом:

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 содержит точку входа и логику для клиента gRPC.

Клиент Greeter создается следующим образом:

  • Создание экземпляра GrpcChannel со сведениями для создания подключения к службе gRPC.
  • Использование GrpcChannel для создания клиента 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();
}

Клиент Greeter вызывает асинхронный метод SayHello. Отображается результат вызова SayHello:

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

Тестирование клиента gRPC с помощью службы Greeter gRPC

  • В службе Greeter нажмите Ctrl+F5 для запуска сервера без отладчика.
  • В проекте GrpcGreeterClient нажмите Ctrl+F5 для запуска клиента без отладчика.

Клиент отправляет приветствие в службу с сообщением, в котором содержится его имя GreeterClient. Служба отправляет сообщение "Hello GreeterClient" в качестве ответа. Ответ "Hello GreeterClient" отображается в командной строке:

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

Служба gRPC записывает сведения об успешном вызове в журналы, что отображается в командной строке:

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

Примечание.

Чтобы применить код, описанный в этой статье, требуется сертификат разработки HTTPS ASP.NET Core для защиты службы gRPC. Если .NET gRPC возвращает сообщение The remote certificate is invalid according to the validation procedure. или The SSL connection could not be established., это значит, что сертификат разработки не является доверенным. Чтобы исправить эту проблему, см. Вызов службы gRPC с использованием ненадежного или недействительного сертификата.

Следующие шаги