Поделиться через


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

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

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

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

Prerequisites

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

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

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

  • Запустите Visual Studio 2022 и выберите новый проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Важно назвать проект GrpcGreeter , чтобы пространства имен соответствовали при копировании и вставке кода.
  • Select Next.
  • В диалоговом окне Дополнительные сведения выберите .NET 9.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.
      • порт: случайным образом назначенный номер порта для приложения.
      • 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

Note

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта локального узла службы gRPC назначается случайным образом при создании проекта и задания в свойстве\launchSettings.jsв файле проекта службы 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 9.0 (стандартная поддержка) и затем выберите Создать.

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

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

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

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

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

  • В Visual Studio выберитеконсоль диспетчера>пакетов NuGetTools>

  • В окне консоли диспетчер пакетов выполните команду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.

Add greet.proto

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

  • Скопируйте файл Protos\greet.proto из службы приветствия 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.

Note

Типы 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 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"
    }
  }
}
  • В проекте службы GrpcGreeter нажмите Ctrl+F5, чтобы запустить сервер без отладчика.
  • В проекте консоли GrpcGreeterClient нажмите Ctrl+F5, чтобы запустить клиент без отладчика.

Клиент отправляет приветствие службе с сообщением, содержащим его имя , GreetingerClient. Служба отправляет сообщение "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 HTTP/2 POST https://localhost:7042/greet.Greeter/SayHello - 200 - application/grpc 40.4615ms

Note

Чтобы применить код, описанный в этой статье, требуется сертификат разработки 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 с использованием ненадежного или недействительного сертификата.

Next steps

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

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

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

Prerequisites

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

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

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

  • Запустите Visual Studio 2022 и выберите новый проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Важно назвать проект GrpcGreeter , чтобы пространства имен соответствовали при копировании и вставке кода.
  • Select Next.
  • В диалоговом окне "Дополнительные сведения " выберите .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.
      • порт: случайным образом назначенный номер порта для приложения.
      • 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

Note

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта локального узла службы gRPC назначается случайным образом при создании проекта и задания в свойстве\launchSettings.jsв файле проекта службы 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.
  • Google.Protobuf, содержащий API-интерфейсы сообщений protobuf для C#.
  • Grpc.Tools, содержащий поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

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

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

  • В Visual Studio выберитеконсоль диспетчера>пакетов NuGetTools>

  • В окне консоли диспетчер пакетов выполните команду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.

Add greet.proto

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

  • Скопируйте файл Protos\greet.proto из службы приветствия 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.

Note

Типы 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 для запуска клиента без отладчика.

Клиент отправляет приветствие службе с сообщением, содержащим его имя , GreetingerClient. Служба отправляет сообщение "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

Note

Чтобы применить код, описанный в этой статье, требуется сертификат разработки 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 с использованием ненадежного или недействительного сертификата.

Next steps

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

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

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

Prerequisites

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

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

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

  • Запустите Visual Studio 2022 и нажмите Создать проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Важно назвать проект GrpcGreeter , чтобы пространства имен соответствовали при копировании и вставке кода.
  • Select Next.
  • В диалоговом окне "Дополнительные сведения " выберите .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.
      • порт: случайным образом назначенный номер порта для приложения.
      • 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

Note

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта локального узла службы gRPC назначается случайным образом при создании проекта и задания в свойстве\launchSettings.jsв файле проекта службы 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.
  • Google.Protobuf, содержащий API-интерфейсы сообщений protobuf для C#.
  • Grpc.Tools, содержащий поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

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

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

  • В Visual Studio выберитеконсоль диспетчера>пакетов NuGetTools>

  • В окне консоли диспетчер пакетов выполните команду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.

Add greet.proto

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

  • Скопируйте файл Protos\greet.proto из службы приветствия 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.

Note

Типы 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 для запуска клиента без отладчика.

Клиент отправляет приветствие службе с сообщением, содержащим его имя , GreetingerClient. Служба отправляет сообщение "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

Note

Чтобы применить код, описанный в этой статье, требуется сертификат разработки 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 с использованием ненадежного или недействительного сертификата.

Next steps

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

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

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

Prerequisites

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

  • Запустите Visual Studio 2022 и нажмите Создать проект.
  • В диалоговом окне Создание нового проекта найдите пункт gRPC. Выберите Служба ASP.NET Core gRPC и нажмите Далее.
  • В диалоговом окне Настроить новый проект введите GrpcGreeter в поле Имя проекта. Важно назвать проект GrpcGreeter , чтобы пространства имен соответствовали при копировании и вставке кода.
  • Select Next.
  • В диалоговом окне "Дополнительные сведения " выберите .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.
      • порт: случайным образом назначенный номер порта для приложения.
      • 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

Note

Шаблон gRPC настроен для использования протокола TLS. Клиенты gRPC должны использовать протокол HTTPS для обращения к серверу. Номер порта локального узла службы gRPC назначается случайным образом при создании проекта и задания в свойстве\launchSettings.jsв файле проекта службы 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.
  • Google.Protobuf, содержащий API-интерфейсы сообщений protobuf для C#.
  • Grpc.Tools, содержащий поддержку инструментов C# для файлов protobuf. Пакет инструментов не требуется во время выполнения, поэтому зависимость помечается PrivateAssets="All".

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

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

  • В Visual Studio выберитеконсоль диспетчера>пакетов NuGetTools>

  • В окне консоли диспетчер пакетов выполните команду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.

Add greet.proto

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

  • Скопируйте файл Protos\greet.proto из службы приветствия 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.

Note

Типы 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 для запуска клиента без отладчика.

Клиент отправляет приветствие службе с сообщением, содержащим его имя , GreetingerClient. Служба отправляет сообщение "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"

Note

Чтобы применить код, описанный в этой статье, требуется сертификат разработки 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 с использованием ненадежного или недействительного сертификата.

Next steps

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

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

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

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

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

Prerequisites

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

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

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

  • Нажмите клавиши 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

Note

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

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

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

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

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

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

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

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

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

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

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

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

  • В Visual Studio выберитеконсоль диспетчера>пакетов NuGetTools>

  • В окне консоли диспетчер пакетов выполните команду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.

Add greet.proto

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

  • Скопируйте файл Protos\greet.proto из службы приветствия 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.

Note

Типы 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 для запуска клиента без отладчика.

Клиент отправляет приветствие службе с сообщением, содержащим его имя , GreetingerClient. Служба отправляет сообщение "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

Note

Чтобы применить код, описанный в этой статье, требуется сертификат разработки 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 с использованием ненадежного или недействительного сертификата.

Next steps

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

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

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

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

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

Prerequisites

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

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

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

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

  • Назовите проект GrpcGreeter. Важно назвать проект GrpcGreeter , чтобы пространства имен соответствовали при копировании и вставке кода.

  • Select Create.

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

    • Выбран шаблон службы gRPC .
    • Select Create.

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

  • Нажмите клавиши 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

Note

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

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

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

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

  • greet.proto: файл Protos/greet.proto определяет Greeter gRPC и используется для создания ресурсов сервера gRPC. Дополнительные сведения см. в разделе Введение в gRPC.
  • Папка служб: содержит реализацию 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 выберитеконсоль диспетчера>пакетов NuGetTools>

  • В окне консоли диспетчер пакетов выполните команду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.

Add greet.proto

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

  • Скопируйте файл Protos\greet.proto из службы приветствия 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.

Note

Типы 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 для запуска клиента без отладчика.

Клиент отправляет приветствие службе с сообщением, содержащим его имя , GreetingerClient. Служба отправляет сообщение "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

Note

Чтобы применить код, описанный в этой статье, требуется сертификат разработки 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 с использованием ненадежного или недействительного сертификата.

Next steps