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íček Grpc.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á:

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_lengthkteré 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