Migrace gRPC z C-Core na gRPC pro .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.
Vzhledem k implementaci základního zásobníku nefungují všechny funkce stejným způsobem mezi aplikacemi gRPC založenými na C a gRPC pro .NET. Tento dokument zvýrazňuje hlavní rozdíly pro migraci mezi těmito dvěma zásobníky.
Důležité
GRPC C-core je v režimu údržby a bude vyřazen ve prospěch gRPC pro .NET. Pro nové aplikace se nedoporučuje gRPC C-core.
Podpora platformy
GRPC C-core a gRPC pro .NET mají podporu různých platforem:
- gRPC C-core: Implementace C++ gRPC s vlastními zásobníky TLS a HTTP/2. Balíček
Grpc.Core
je obálka .NET kolem gRPC C-Core a obsahuje klienta a server gRPC. Podporuje rozhraní .NET Framework, .NET Core a .NET 5 nebo novější. - gRPC pro .NET: Určeno pro .NET Core 3.x a .NET 5 nebo novější. Využívá zásobníky TLS a HTTP/2 integrované do moderních verzí .NET. Balíček
Grpc.AspNetCore
obsahuje server gRPC hostovaný v ASP.NET Core a vyžaduje .NET Core 3.x nebo .NET 5 nebo novější. BalíčekGrpc.Net.Client
obsahuje klienta gRPC. Klient máGrpc.Net.Client
omezenou podporu rozhraní .NET Framework pomocí WinHttpHandlerrozhraní .
Další informace najdete v tématu gRPC na podporovaných platformách .NET.
Konfigurace serveru a kanálu
Balíčky NuGet, konfigurace a spouštěcí kód musí být změněny při migraci z gRPC C-Core na gRPC pro .NET.
gRPC pro .NET obsahuje samostatné balíčky NuGet pro svého klienta a serveru. Přidané balíčky závisí na tom, jestli aplikace hostuje služby gRPC nebo je volá:
Grpc.AspNetCore
: Služby hostuje ASP.NET Core. Informace o konfiguraci serveru najdete v tématu služby gRPC s ASP.NET Core.Grpc.Net.Client
: Klienti používajíGrpcChannel
, který interně používá síťové funkce integrované do .NET. Informace o konfiguraci klienta naleznete v tématu Volání služeb gRPC s klientem .NET.
Po dokončení Grpc.Core
migrace by se balíček měl z aplikace odebrat. Grpc.Core
obsahuje velké nativní binární soubory a odebrání balíčku snižuje čas obnovení NuGet a velikost aplikace.
Kód generované služby a klienti
gRPC C-Core a gRPC pro .NET sdílí mnoho rozhraní API a kód vygenerovaný ze .proto
souborů je kompatibilní s oběma implementacemi gRPC. Většina klientů a služeb je možné migrovat z C-Core na gRPC pro .NET beze změn.
Životnost implementace služby gRPC
Ve výchozím nastavení se v zásobníku ASP.NET Core vytvářejí služby gRPC s vymezenou životností. Naproti tomu gRPC C-core ve výchozím nastavení vytvoří vazbu na službu s jednou životností.
Vymezená životnost umožňuje implementaci služby vyřešit jiné služby s vymezenými životnostmi. Například vymezená životnost se dá přeložit DbContext
také z kontejneru DI prostřednictvím injektáže konstruktoru. Použití životnosti s vymezeným oborem:
- Pro každý požadavek se vytvoří nová instance implementace služby.
- Stav mezi požadavky není možné sdílet prostřednictvím členů instance v typu implementace.
- Očekávání spočívá v ukládání sdílených stavů ve službě singleton v kontejneru DI. Uložené sdílené stavy jsou vyřešeny v konstruktoru implementace služby gRPC.
Další informace o životnosti služeb najdete v tématu Injektáž závislostí v ASP.NET Core.
Přidání jednoúčelové služby
Pro usnadnění přechodu z implementace GRPC C-core na ASP.NET Core je možné změnit životnost služby implementace služby z rozsahu na singleton. To zahrnuje přidání instance implementace služby do kontejneru DI:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
services.AddSingleton(new GreeterService());
}
Implementace služby s jednou životností už ale nedokáže vyřešit omezené služby prostřednictvím injektáže konstruktoru.
Konfigurace možností služeb gRPC
V aplikacích založených na jádrech jazyka C se při vytváření instance serveru konfigurují ChannelOption
nastavení, jako grpc.max_receive_message_length
je a grpc.max_send_message_length
které se konfigurují.
V ASP.NET Core poskytuje gRPC konfiguraci prostřednictvím GrpcServiceOptions
typu. Například službu gRPC je možné nakonfigurovat maximální velikost příchozí zprávy prostřednictvím AddGrpc
. Následující příklad změní výchozí MaxReceiveMessageSize
hodnotu 4 MB na 16 MB:
public void ConfigureServices(IServiceCollection services)
{
services.AddGrpc(options =>
{
options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16 MB
});
}
Další informace o konfiguraci najdete v tématu gRPC pro konfiguraci .NET.
Protokolování
Aplikace založené na jádrech jazyka C spoléhají na GrpcEnvironment
konfiguraci protokolovacího nástroje pro účely ladění. Zásobník ASP.NET Core poskytuje tuto funkci prostřednictvím rozhraní API protokolování. Do služby gRPC lze například přidat protokolovací rutinu prostřednictvím injektáže konstruktoru:
public class GreeterService : Greeter.GreeterBase
{
public GreeterService(ILogger<GreeterService> logger)
{
}
}
Další informace o protokolování a diagnostice gRPC naleznete v tématu Protokolování a diagnostika v gRPC v .NET.
HTTPS
Aplikace založené na jádrech C konfigurují HTTPS prostřednictvím vlastnosti Server.Ports. Podobný koncept se používá ke konfiguraci serverů v ASP.NET Core. Kestrel Například pro tuto funkci se používá konfigurace koncového bodu.
Aplikace založené na jádrech C konfigurují HTTPS prostřednictvím vlastnosti Server.Ports. Podobný koncept se používá ke konfiguraci serverů v ASP.NET Core. Kestrel Například pro tuto funkci se používá konfigurace koncového bodu.
Průsečíky gRPC
ASP.NET middleware Core nabízí podobné funkce v porovnání s průsečíky v aplikacích GRPC založených na jádru C. Obě aplikace podporují ASP.NET core gRPC, takže není nutné přepisovat průsečíky.
Další informace o porovnání těchto funkcí najdete v tématu gRPC Interceptors versus Middleware.
Hostování gRPC v projektech non-ASP.NET Core
Server založený na jádru C lze přidat do libovolného typu projektu. GRPC pro server .NET vyžaduje ASP.NET Core. ASP.NET Core je obvykle k dispozici, protože soubor projektu určuje Microsoft.NET.SDK.Web
jako sadu SDK.
Server gRPC je možné hostovat do non-ASP.NET základních projektů přidáním <FrameworkReference Include="Microsoft.AspNetCore.App" />
do projektu. Referenční informace k rozhraním ASP.NET Core API jsou k dispozici a dají se použít ke spuštění serveru ASP.NET Core.
Další informace najdete v tématu Host gRPC v projektech non-ASP.NET Core.