Общие сведения об использовании gRPC на платформе .NET

Автор: Джеймс Ньютон-Кинг (James Newton-King)

gRPC — это не зависящая от языка высокопроизводительная платформа удаленного вызова процедур (RPC).

Ниже приведены основные преимущества gRPC.

  • Современная высокопроизводительная упрощенная платформа RPC.
  • Разработка API по модели "сначала контракт" с использованием механизма Protocol Buffers по умолчанию, что позволяет выпускать не зависящие от языка реализации.
  • Доступные для многих языков инструменты, предназначенные для создания строго типизированных серверов и клиентов.
  • Поддержка клиентских, серверных и двунаправленных потоковых вызовов.
  • Снижение уровня использования сети за счет двоичной сериализации Protobuf.

Благодаря этим преимуществам gRPC идеально подходит для:

  • упрощенных микрослужб, где важна эффективность;
  • многоязычных систем, где для разработки требуется несколько языков;
  • работающих в режиме реального времени служб типа "точка-точка", которые должны обрабатывать запросы и ответы потоковой передачи данных.

Предупреждение

ASP.NET Core gRPC предусматривает дополнительные требования в отношении использования со Службой приложений Azure или службами IIS. Дополнительные сведения о том, где можно использовать gRPC, см. в разделе Использование gRPC на поддерживаемых платформах .NET.

Средства C# для работы с файлами с расширением .proto

Для разработки API в gRPC используется подход, при котором сначала создается контракт. Службы и сообщения определяются в файлах *.proto:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Типы .NET для служб, клиентов и сообщений создаются автоматически путем добавления файлов *.proto в проект.

  • Добавьте ссылку на пакет Grpc.Tools.
  • Добавьте файлы *.proto в группу элементов <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

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

Службы gRPC на платформе ASP.NET Core

Службы gRPC можно размещать на платформе ASP.NET Core. Службы поддерживают полную интеграцию с функциями ASP.NET Core, такими как ведение журнала, внедрение зависимостей (DI), проверка подлинности и авторизация.

Добавление служб gRPC в приложение ASP.NET Core

Для gRPC требуется пакет Grpc.AspNetCore. Сведения о настройке gRPC в приложении .NET см. в разделе Настройка gRPC.

Шаблон проекта службы gRPC

В шаблоне проекта службы gRPC ASP.NET Core предоставляется базовая служба:

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService является производным от типа GreeterBase, который создается из службы Greeter в файле *.proto. Служба становится доступной для клиентов в Program.cs.

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

Дополнительные сведения о службах gRPC на ASP.NET Core см. в статье Службы gRPC в ASP.NET Core.

Вызов служб gRPC с помощью клиента .NET

Клиенты gRPC являются конкретными типами клиентов, создаваемыми в файлах *.proto. Конкретный клиент gRPC использует методы, которые выполняют преобразование для служб gRPC в файле *.proto.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

Клиент gRPC создается с помощью канала, который представляет длительное подключение к службе gRPC. Канал можно создать с помощью GrpcChannel.ForAddress.

Дополнительные сведения о создании клиентов и вызове различных методов службы см. в статье Вызов служб gRPC с помощью клиента .NET.

Дополнительные ресурсы

gRPC — это не зависящая от языка высокопроизводительная платформа удаленного вызова процедур (RPC).

Ниже приведены основные преимущества gRPC.

  • Современная высокопроизводительная упрощенная платформа RPC.
  • Разработка API по модели "сначала контракт" с использованием механизма Protocol Buffers по умолчанию, что позволяет выпускать не зависящие от языка реализации.
  • Доступные для многих языков инструменты, предназначенные для создания строго типизированных серверов и клиентов.
  • Поддержка клиентских, серверных и двунаправленных потоковых вызовов.
  • Снижение уровня использования сети за счет двоичной сериализации Protobuf.

Благодаря этим преимуществам gRPC идеально подходит для:

  • упрощенных микрослужб, где важна эффективность;
  • многоязычных систем, где для разработки требуется несколько языков;
  • работающих в режиме реального времени служб типа "точка-точка", которые должны обрабатывать запросы и ответы потоковой передачи данных.

Предупреждение

ASP.NET Core gRPC предусматривает дополнительные требования в отношении использования со Службой приложений Azure или службами IIS. Дополнительные сведения о том, где можно использовать gRPC, см. в разделе Использование gRPC на поддерживаемых платформах .NET.

Средства C# для работы с файлами с расширением .proto

Для разработки API в gRPC используется подход, при котором сначала создается контракт. Службы и сообщения определяются в файлах *.proto:

syntax = "proto3";

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply);
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

Типы .NET для служб, клиентов и сообщений создаются автоматически путем добавления файлов *.proto в проект.

  • Добавьте ссылку на пакет Grpc.Tools.
  • Добавьте файлы *.proto в группу элементов <Protobuf>.
<ItemGroup>
  <Protobuf Include="Protos\greet.proto" />
</ItemGroup>

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

Службы gRPC на платформе ASP.NET Core

Службы gRPC можно размещать на платформе ASP.NET Core. Службы поддерживают полную интеграцию с функциями ASP.NET Core, такими как ведение журнала, внедрение зависимостей (DI), проверка подлинности и авторизация.

Добавление служб gRPC в приложение ASP.NET Core

Для gRPC требуется пакет Grpc.AspNetCore. Сведения о настройке gRPC в приложении .NET см. в разделе Настройка gRPC.

Шаблон проекта службы gRPC

В шаблоне проекта gRPC предоставляется базовая служба:

public class GreeterService : Greeter.GreeterBase
{
    private readonly ILogger<GreeterService> _logger;

    public GreeterService(ILogger<GreeterService> logger)
    {
        _logger = logger;
    }

    public override Task<HelloReply> SayHello(HelloRequest request,
        ServerCallContext context)
    {
        _logger.LogInformation("Saying hello to {Name}", request.Name);
        return Task.FromResult(new HelloReply 
        {
            Message = "Hello " + request.Name
        });
    }
}

GreeterService является производным от типа GreeterBase, который создается из службы Greeter в файле *.proto. Служба становится доступной для клиентов в Startup.cs.

app.UseEndpoints(endpoints =>
{
    endpoints.MapGrpcService<GreeterService>();
});

Дополнительные сведения о службах gRPC на ASP.NET Core см. в статье Службы gRPC в ASP.NET Core.

Вызов служб gRPC с помощью клиента .NET

Клиенты gRPC являются конкретными типами клиентов, создаваемыми в файлах *.proto. Конкретный клиент gRPC использует методы, которые выполняют преобразование для служб gRPC в файле *.proto.

var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new Greeter.GreeterClient(channel);

var response = await client.SayHelloAsync(
    new HelloRequest { Name = "World" });

Console.WriteLine(response.Message);

Клиент gRPC создается с помощью канала, который представляет длительное подключение к службе gRPC. Канал можно создать с помощью GrpcChannel.ForAddress.

Дополнительные сведения о создании клиентов и вызове различных методов службы см. в статье Вызов служб gRPC с помощью клиента .NET.

Дополнительные ресурсы