Migrowanie gRPC z C-core do gRPC dla platformy .NET

Ze względu na implementację bazowego stosu nie wszystkie funkcje działają w ten sam sposób między aplikacjami gRPC opartymi na języku C i gRPC dla platformy .NET. W tym dokumencie przedstawiono kluczowe różnice w migracji między dwoma stosami.

Ważne

GRPC C-core jest w trybie konserwacji i będzie przestarzały na rzecz gRPC dla platformy .NET. GRPC C-core nie jest zalecane w przypadku nowych aplikacji.

Obsługa platform

GRPC C-core i gRPC dla platformy .NET mają inną obsługę platformy:

  • gRPC C-core: implementacja GRPC języka C++ z własnymi stosami TLS i HTTP/2. Pakiet Grpc.Core jest otoką platformy .NET wokół rdzenia C-core gRPC i zawiera klienta i serwer gRPC. Obsługuje ona programy .NET Framework, .NET Core i .NET 5 lub nowsze.
  • gRPC dla platformy .NET: przeznaczony dla platform .NET Core 3.x i .NET 5 lub nowszych. Używa on stosów TLS i HTTP/2 wbudowanych w nowoczesne wersje platformy .NET. Pakiet Grpc.AspNetCore zawiera serwer gRPC, który jest hostowany w ASP.NET Core i wymaga platformy .NET Core 3.x lub .NET 5 lub nowszej. Pakiet Grpc.Net.Client zawiera klienta gRPC. Klient w programie Grpc.Net.Client ma ograniczoną obsługę programu .NET Framework przy użyciu programu WinHttpHandler.

Aby uzyskać więcej informacji, zobacz gRPC na obsługiwanych platformach .NET.

Konfigurowanie serwera i kanału

Pakiety NuGet, konfiguracja i kod uruchamiania muszą być modyfikowane podczas migracji z GRPC C-Core do gRPC dla platformy .NET.

Usługa gRPC dla platformy .NET ma oddzielne pakiety NuGet dla swojego klienta i serwera. Dodane pakiety zależą od tego, czy aplikacja hostuje usługi gRPC, czy wywołuje je:

Po zakończeniu Grpc.Core migracji pakiet powinien zostać usunięty z aplikacji. Grpc.Core zawiera duże pliki binarne natywne, a usunięcie pakietu skraca czas przywracania NuGet i rozmiar aplikacji.

Wygenerowane przez kod usługi i klienci

gRPC C-Core i gRPC dla platformy .NET współużytkuje wiele interfejsów API, a kod generowany na podstawie .proto plików jest zgodny z implementacjami gRPC. Większość klientów i usług można migrować z C-Core do gRPC dla platformy .NET bez zmian.

Okres istnienia implementacji usługi gRPC

W stosie ASP.NET Core usługi gRPC domyślnie są tworzone z okresem istnienia o określonym zakresie. Z kolei gRPC C-core domyślnie wiąże się z usługą z pojedynczym okresem istnienia.

Okres istnienia o określonym zakresie umożliwia implementacji usługi rozpoznawanie innych usług z okresami istnienia o określonym zakresie. Na przykład okres istnienia o określonym zakresie może również zostać rozpoznany DbContext z kontenera DI za pomocą iniekcji konstruktora. Korzystanie z okresu istnienia o określonym zakresie:

  • Nowe wystąpienie implementacji usługi jest tworzone dla każdego żądania.
  • Nie można współużytkować stanu między żądaniami za pośrednictwem elementów członkowskich wystąpienia w typie implementacji.
  • Oczekiwanie polega na przechowywaniu stanów udostępnionych w pojedynczej usłudze w kontenerze DI. Przechowywane stany udostępnione są rozpoznawane w konstruktorze implementacji usługi gRPC.

Aby uzyskać więcej informacji na temat okresów istnienia usługi, zobacz Wstrzykiwanie zależności w programie ASP.NET Core.

Dodawanie pojedynczej usługi

Aby ułatwić przejście z implementacji rdzenia C gRPC do ASP.NET Core, można zmienić okres istnienia usługi implementacji usługi z zakresu na pojedynczy. Obejmuje to dodanie wystąpienia implementacji usługi do kontenera DI:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
    services.AddSingleton(new GreeterService());
}

Jednak implementacja usługi z pojedynczym okresem istnienia nie jest już w stanie rozpoznać usług o określonym zakresie za pomocą iniekcji konstruktora.

Konfigurowanie opcji usług gRPC

W aplikacjach opartych na języku C ustawienia, takie jak grpc.max_receive_message_length i grpc.max_send_message_length , są konfigurowane ChannelOption podczas konstruowania wystąpienia serwera.

W ASP.NET Core gRPC zapewnia konfigurację GrpcServiceOptions za pośrednictwem typu. Na przykład usługa gRPC może skonfigurować maksymalny rozmiar komunikatu przychodzącego za pomocą polecenia AddGrpc. Poniższy przykład zmienia domyślną wartość MaxReceiveMessageSize 4 MB na 16 MB:

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc(options =>
    {
        options.MaxReceiveMessageSize = 16 * 1024 * 1024; // 16 MB
    });
}

Aby uzyskać więcej informacji na temat konfiguracji, zobacz gRPC dla konfiguracji platformy .NET.

Rejestrowanie

Aplikacje oparte na języku C opierają się na GrpcEnvironment sposobie konfigurowania rejestratora na potrzeby debugowania. Stos ASP.NET Core zapewnia tę funkcję za pośrednictwem interfejsu API rejestrowania. Na przykład rejestrator można dodać do usługi gRPC za pomocą iniekcji konstruktora:

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

Aby uzyskać więcej informacji na temat rejestrowania i diagnostyki gRPC, zobacz Rejestrowanie i diagnostyka w usłudze gRPC na platformie .NET.

HTTPS

Aplikacje oparte na języku C konfigurują protokół HTTPS za pomocą właściwości Server.Ports. Podobna koncepcja służy do konfigurowania serwerów w programie ASP.NET Core. Na przykład Kestrel używa konfiguracji punktu końcowego dla tej funkcji.

Aplikacje oparte na języku C konfigurują protokół HTTPS za pomocą właściwości Server.Ports. Podobna koncepcja służy do konfigurowania serwerów w programie ASP.NET Core. Na przykład Kestrel używa konfiguracji punktu końcowego dla tej funkcji.

Przechwytniki gRPC

oprogramowanie pośredniczące ASP.NET Core oferuje podobne funkcje w porównaniu do przechwytywania w aplikacjach gRPC opartych na rdzeniach C. Oba są obsługiwane przez aplikacje gRPC ASP.NET Core, więc nie ma potrzeby ponownego zapisywania przechwytujących.

Aby uzyskać więcej informacji na temat porównywania tych funkcji ze sobą, zobacz gRPC Interceptors and Middleware (Przechwytywanie gRPC i oprogramowanie pośredniczące).

Hostowanie usługi gRPC w projektach non-ASP.NET Core

Serwer oparty na języku C można dodać do dowolnego typu projektu. GRPC dla serwera .NET wymaga ASP.NET Core. ASP.NET Core jest zwykle dostępna, ponieważ plik projektu określa Microsoft.NET.SDK.Web jako zestaw SDK.

Serwer gRPC może być hostowany w celu non-ASP.NET projektów Core przez dodanie <FrameworkReference Include="Microsoft.AspNetCore.App" /> do projektu. Dokumentacja platformy udostępnia ASP.NET Core API i może służyć do uruchamiania serwera ASP.NET Core.

Aby uzyskać więcej informacji, zobacz Host gRPC w projektach non-ASP.NET Core.

Dodatkowe zasoby