Migrace gRPC z C-Core na gRPC pro .NET
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.
Další materiály
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro