Używanie klienta gRPC z platformą .NET Standard 2.0

Autor: James Newton-King

W tym artykule omówiono sposób używania klienta gRPC platformy .NET z implementacjami platformy .NET obsługującymi platformę .NET Standard 2.0.

implementacje platformy .NET

Następujące implementacje platformy .NET (lub nowsze) obsługują klienta Grpc.Net.Client , ale nie mają pełnej obsługi protokołu HTTP/2:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • platforma uniwersalna systemu Windows 10.0.16299
  • Unity 2018.1

Klient gRPC platformy .NET może wywoływać usługi z tych implementacji platformy .NET z dodatkową konfiguracją.

Konfiguracja programu HttpHandler

Dostawca HTTP musi być skonfigurowany przy użyciu polecenia GrpcChannelOptions.HttpHandler. Jeśli program obsługi nie jest skonfigurowany, zostanie zgłoszony błąd:

System.PlatformNotSupportedException: gRPC wymaga dodatkowej konfiguracji, aby pomyślnie wykonywać wywołania RPC w implementacjach platformy .NET, które nie mają obsługi gRPC za pośrednictwem protokołu HTTP/2. Dostawca HTTP musi być określony przy użyciu polecenia GrpcChannelOptions.HttpHandler. Skonfigurowany dostawca HTTP musi obsługiwać protokół HTTP/2 lub być skonfigurowany do korzystania z usługi gRPC-Web.

Implementacje platformy .NET, które nie obsługują protokołu HTTP/2, takich jak platforma UWP, platforma Xamarin i aparat Unity, mogą użyć biblioteki gRPC-Web jako alternatywy.

var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new GrpcWebHandler(new HttpClientHandler())
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

Klienci można również utworzyć przy użyciu fabryki klienta gRPC. Dostawca HTTP jest skonfigurowany przy użyciu ConfigurePrimaryHttpMessageHandler metody rozszerzenia.

builder.Services
    .AddGrpcClient<Greet.GreeterClient>(options =>
    {
        options.Address = new Uri("https://localhost:5001");
    })
    .ConfigurePrimaryHttpMessageHandler(
        () => new GrpcWebHandler(new HttpClientHandler()));

Aby uzyskać więcej informacji, zobacz Konfigurowanie usługi gRPC-Web przy użyciu klienta gRPC platformy .NET.

Ważne

gRPC-Web wymaga, aby klient i serwer go obsługiwał. Serwer gRPC-Web można szybko skonfigurować przez serwer gRPC ASP.NET Core gRPC. Inne implementacje serwera gRPC wymagają serwera proxy do obsługi gRPC-Web.

.NET Framework

Program .NET Framework ma ograniczoną obsługę funkcji gRPC za pośrednictwem protokołu HTTP/2. Aby włączyć funkcję gRPC za pośrednictwem protokołu HTTP/2 na platformie .NET Framework, skonfiguruj kanał do użycia .WinHttpHandler

Wymagania i ograniczenia dotyczące korzystania z programu WinHttpHandler:

  • Windows 11 lub nowszy, Windows Server 2019 lub nowszy.
    • Klient gRPC jest w pełni obsługiwany w systemie Windows 11 lub nowszym.
    • Klient gRPC jest częściowo obsługiwany w systemach Windows Server 2019 i Windows Server 2022. Obsługiwane są metody przesyłania strumieniowego jednoargumentowego i serwera. Metody przesyłania strumieniowego klienta i dwukierunkowego nieobsługiwane.
  • Odwołanie do System.Net.Http.WinHttpHandler wersji 6.0.1 lub nowszej.
  • Skonfiguruj WinHttpHandler w kanale przy użyciu polecenia GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 lub nowszy.
  • Obsługiwane są tylko wywołania gRPC za pośrednictwem protokołu TLS.
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpHandler = new WinHttpHandler()
    });

var client = new Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new HelloRequest { Name = ".NET" });

gRPC C# core-library

Alternatywną opcją dla platformy .NET Framework i platformy Xamarin jest użycie podstawowej biblioteki gRPC C# do wykonywania wywołań gRPC. Biblioteka podstawowa języka C# gRPC to:

  • Biblioteka innej firmy, która obsługuje wykonywanie wywołań gRPC za pośrednictwem protokołu HTTP/2 na platformie .NET Framework i Xamarin.
  • Firma Microsoft nie jest obsługiwana.
  • W trybie konserwacji i będzie przestarzały na rzecz gRPC dla platformy .NET.
  • Niezalecane w przypadku nowych aplikacji.

Dodatkowe zasoby