Přehled gRPC v .NET
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Autor: James Newton-King
gRPC je výkonná architektura využívající vzdálené volání procedur (RPC) nezávislá na programovacím jazyku.
Mezi výhody gRPC patří:
- Moderní, výkonná a jednoduchá architektura RPC
- Vývoj rozhraní API začínající kontraktem, který standardně využívá vyrovnávací paměti protokolů, čímž umožňuje implementace nezávislé na jazycích
- Nástroje dostupné pro řadu jazyků, se kterými lze generovat servery a klienty silného typu
- Podpora volání klienta, serveru a obousměrného streamování
- Menší využití sítě díky binární serializaci Protobuf
Díky těmto výhodám je gRPC ideální pro:
- Jednoduché mikroslužby, u kterých je důležitá efektivita
- Polyglotní systémy, při jejichž vývoji se vyžaduje více jazyků
- Služby typu point-to-point fungující v reálném čase, které musí zpracovávat požadavky nebo odpovědi streamování
Podpora nástrojů jazyka C# pro soubory .proto
V gRPC se při vývoji rozhraní API používá přístup založený na kontraktech. Služby a zprávy se definují v souborech .proto
:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Typy .NET pro služby, klienty a zprávy se generují automaticky vložením souborů .proto
do projektu:
- Přidejte odkaz na balíček Grpc.Tools.
- Přidejte soubory
.proto
do skupiny položek<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Další informace o podpoře nástrojů gRPC najdete v tématu Služby gRPC v jazyce C#.
Služby gRPC v ASP.NET Core
Služby gRPC je možné hostovat v ASP.NET Core. Služby jsou plně integrované s funkcemi ASP.NET Core, jako jsou protokolování, injektáž závislostí, ověřování nebo autorizace.
Přidání služeb gRPC do aplikace ASP.NET Core
Pro gRPC se vyžaduje balíček Grpc.AspNetCore. Informace o konfiguraci gRPC v aplikaci .NET najdete v části Konfigurace gRPC.
Šablona projektu služby gRPC
Šablona projektu služby ASP.NET Core gRPC nabízí základní službu:
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
});
}
}
Třída GreeterService
dědí typ z třídy GreeterBase
, která se generuje ze služby Greeter
v souboru .proto
. Služba je přístupná klientům v souboru Program.cs
:
app.MapGrpcService<GreeterService>();
Další informace o službách gRPC v ASP.NET Core najdete v tématu Služby gRPC v ASP.NET Core.
Volání služeb gRPC pomocí klienta .NET
Klienti gRPC jsou konkrétní typy klientů, kteří se generují ze souborů .proto
. Konkrétní klient gRPC obsahuje metody, které se překládají na službu gRPC v souboru .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);
Klient gRPC se vytváří pomocí kanálu, který představuje dlouhodobé připojení ke službě gRPC. Kanál je možné vytvořit pomocí metody GrpcChannel.ForAddress
.
Další informace o vytváření klientů a volání různých metod služeb najdete v tématu Volání služeb gRPC pomocí klienta .NET.
Další materiály
gRPC je výkonná architektura využívající vzdálené volání procedur (RPC) nezávislá na programovacím jazyku.
Mezi výhody gRPC patří:
- Moderní, výkonná a jednoduchá architektura RPC
- Vývoj rozhraní API začínající kontraktem, který standardně využívá vyrovnávací paměti protokolů, čímž umožňuje implementace nezávislé na jazycích
- Nástroje dostupné pro řadu jazyků, se kterými lze generovat servery a klienty silného typu
- Podpora volání klienta, serveru a obousměrného streamování
- Menší využití sítě díky binární serializaci Protobuf
Díky těmto výhodám je gRPC ideální pro:
- Jednoduché mikroslužby, u kterých je důležitá efektivita
- Polyglotní systémy, při jejichž vývoji se vyžaduje více jazyků
- Služby typu point-to-point fungující v reálném čase, které musí zpracovávat požadavky nebo odpovědi streamování
Podpora nástrojů jazyka C# pro soubory .proto
V gRPC se při vývoji rozhraní API používá přístup založený na kontraktech. Služby a zprávy se definují v souborech .proto
:
syntax = "proto3";
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Typy .NET pro služby, klienty a zprávy se generují automaticky vložením souborů .proto
do projektu:
- Přidejte odkaz na balíček Grpc.Tools.
- Přidejte soubory
.proto
do skupiny položek<Protobuf>
.
<ItemGroup>
<Protobuf Include="Protos\greet.proto" />
</ItemGroup>
Další informace o podpoře nástrojů gRPC najdete v tématu Služby gRPC v jazyce C#.
Služby gRPC v ASP.NET Core
Služby gRPC je možné hostovat v ASP.NET Core. Služby jsou plně integrované s funkcemi ASP.NET Core, jako jsou protokolování, injektáž závislostí, ověřování nebo autorizace.
Přidání služeb gRPC do aplikace ASP.NET Core
Pro gRPC se vyžaduje balíček Grpc.AspNetCore. Informace o konfiguraci gRPC v aplikaci .NET najdete v části Konfigurace gRPC.
Šablona projektu služby gRPC
Šablona projektu služby gRPC nabízí základní službu:
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
});
}
}
Třída GreeterService
dědí typ z třídy GreeterBase
, která se generuje ze služby Greeter
v souboru .proto
. Služba je přístupná klientům v souboru Startup.cs
:
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>();
});
Další informace o službách gRPC v ASP.NET Core najdete v tématu Služby gRPC v ASP.NET Core.
Volání služeb gRPC pomocí klienta .NET
Klienti gRPC jsou konkrétní typy klientů, kteří se generují ze souborů .proto
. Konkrétní klient gRPC obsahuje metody, které se překládají na službu gRPC v souboru .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);
Klient gRPC se vytváří pomocí kanálu, který představuje dlouhodobé připojení ke službě gRPC. Kanál je možné vytvořit pomocí metody GrpcChannel.ForAddress
.
Další informace o vytváření klientů a volání různých metod služeb najdete v tématu Volání služeb gRPC pomocí klienta .NET.