Migrace služeb gRPC z C-core na ASP.NET Core

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 core a ASP.NET Core aplikacemi. Tento dokument zvýrazní hlavní rozdíly při migraci mezi dvěma zásobníky.

Důležité

Jádro c-core gRPC je v režimu maintaince a v gRPC pro .NETbude zastaralé. GRPC C-Core se nedoporučuje pro nové aplikace.

Doba života implementace služby gRPC

V ASP.NET Core se služby gRPC ve výchozím nastavení vytvářejí s vymezenou životností. Naproti tomu gRPC C-Core ve výchozím nastavení váže na službu s jednou životností.

Vymezená doba života umožňuje implementaci služby řešit jiné služby s vymezenou životností. Například doba života vymezená oborem se také může překládá z kontejneru DbContext injektáže konstruktoru. Použití doby života s vymezenou oborem:

  • Pro každý požadavek je vytvořena nová instance implementace služby.
  • Není možné sdílet stav mezi požadavky prostřednictvím členů instance typu implementace.
  • Očekává se, že se sdílené stavy uloží do jednosměnné služby v kontejneru IN. 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í jednosměnné služby

Pro usnadnění přechodu z implementace jádra C gRPC na ASP.NET Core je možné změnit životnost služby implementace služby z vymezené na jednu. 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 není schopná vyřešit služby s vymezeným oborem prostřednictvím injektáže konstruktoru.

Konfigurace možností služeb gRPC

V aplikacích založených na jádrech jazyka C jsou při vytváření instance serveru nakonfigurovaná nastavení, jako je a grpc.max_receive_message_length grpc.max_send_message_length ChannelOption .

V ASP.NET Core gRPC poskytuje konfiguraci prostřednictvím GrpcServiceOptions typu . Například maximální velikost příchozích zpráv ve službě gRPC je možné nakonfigurovat prostřednictvím AddGrpc . Následující příklad změní výchozí hodnotu MaxReceiveMessageSize 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 Konfigurace gRPC pro .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 tuto funkci poskytuje prostřednictvím rozhraní API pro protokolování. Protokolovací nástroj lze například přidat do služby gRPC prostřednictvím injektáže konstruktoru:

public class GreeterService : Greeter.GreeterBase
{
    public GreeterService(ILogger<GreeterService> logger)
    {
    }
}

HTTPS

Aplikace založené na C-core konfiguruje HTTPS prostřednictvím vlastnosti Server.Ports. Podobný koncept se používá ke konfiguraci serverů v ASP.NET Core. Pro tuto Kestrel funkci například používá konfiguraci koncového bodu.

Aplikace založené na C-core konfiguruje HTTPS prostřednictvím vlastnosti Server.Ports. Podobný koncept se používá ke konfiguraci serverů v ASP.NET Core. Pro tuto Kestrel funkci například používá konfiguraci koncového bodu.

Zachytávače gRPC vs. middleware

ASP.NET Core middleware nabízí podobné funkce v porovnání se zachytávači v aplikacích gRPC založených na jádrech jazyka C. ASP.NET Core a sběrače jsou koncepčně podobné. Obě:

  • Slouží k vytvoření kanálu, který zpracovává požadavek gRPC.
  • Povolte provedení práce před nebo po další komponentě v kanálu.
  • Poskytnutí přístupu k HttpContext :
    • V HttpContext middlewaru je parametr .
    • V HttpContext zachytávači je možné přistupovat pomocí ServerCallContext parametru s ServerCallContext.GetHttpContext rozšiřující metodou. Všimněte si, že tato funkce je specifická pro zachytávače spuštěné v ASP.NET Core.

Rozdíly zachycovače gRPC od ASP.NET Core middlewaru:

  • Zachytávače:
    • Pracovat s vrstvou abstrakce gRPC pomocí Třídy ServerCallContext
    • Poskytnutí přístupu k:
      • Deserializovaná zpráva odeslaná do volání.
      • Zpráva vrácená z volání před serializován.
    • Může zachytit a zpracovat výjimky vyvolané službami gRPC.
  • Middleware:
    • Spustí se před zachytávači gRPC.
    • Pracuje s podkladovými zprávami HTTP/2.
    • Může přistupovat pouze k bajtům ze streamů požadavků a odpovědí.

Další materiály