Общие сведения о gRPC на .NET
Примечание.
Это не последняя версия этой статьи. В текущем выпуске см . версию .NET 9 этой статьи.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Дополнительные сведения см. в статье о политике поддержки .NET и .NET Core. В текущем выпуске см . версию .NET 8 этой статьи.
Внимание
Эта информация относится к предварительному выпуску продукта, который может быть существенно изменен до его коммерческого выпуска. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
В текущем выпуске см . версию .NET 9 этой статьи.
Автор: Джеймс Ньютон-Кинг (James Newton-King)
gRPC — это не зависящая от языка высокопроизводительная платформа удаленного вызова процедур (RPC).
Ниже приведены основные преимущества gRPC.
- Современная высокопроизводительная упрощенная платформа RPC.
- Разработка API по модели "сначала контракт" с использованием механизма Protocol Buffers по умолчанию, что позволяет выпускать не зависящие от языка реализации.
- Доступные для многих языков инструменты, предназначенные для создания строго типизированных серверов и клиентов.
- Поддержка клиентских, серверных и двунаправленных потоковых вызовов.
- Снижение уровня использования сети за счет двоичной сериализации Protobuf.
Благодаря этим преимуществам gRPC идеально подходит для:
- упрощенных микрослужб, где важна эффективность;
- многоязычных систем, где для разработки требуется несколько языков;
- работающих в режиме реального времени служб типа "точка-точка", которые должны обрабатывать запросы и ответы потоковой передачи данных.
Средства 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.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 идеально подходит для:
- упрощенных микрослужб, где важна эффективность;
- многоязычных систем, где для разработки требуется несколько языков;
- работающих в режиме реального времени служб типа "точка-точка", которые должны обрабатывать запросы и ответы потоковой передачи данных.
Средства 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.
Дополнительные ресурсы
ASP.NET Core