Sdílet prostřednictvím


Použití klienta gRPC s .NET Standard 2.0

Autor: James Newton-King

Tento článek popisuje, jak používat klienta .NET gRPC s implementacemi .NET, které podporují .NET Standard 2.0.

Implementace .NET

Následující implementace .NET (nebo novější) podporují Grpc.Net.Client , ale nemají úplnou podporu pro HTTP/2:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • Univerzální platforma Windows 10.0.16299
  • Unity 2018.1

Klient .NET gRPC může volat služby z těchto implementací .NET s určitou další konfigurací.

Konfigurace obslužné rutiny Http

Zprostředkovatel HTTP musí být nakonfigurován pomocí GrpcChannelOptions.HttpHandler. Pokud není nakonfigurovaná obslužná rutina, vyvolá se chyba:

System.PlatformNotSupportedException: GRPC vyžaduje dodatečnou konfiguraci pro úspěšné volání RPC u implementací .NET, které nepodporují gRPC přes HTTP/2. Zprostředkovatel HTTP musí být zadán pomocí GrpcChannelOptions.HttpHandler. Nakonfigurovaný zprostředkovatel HTTP musí podporovat protokol HTTP/2 nebo musí být nakonfigurovaný tak, aby používal gRPC-Web.

Implementace .NET, které nepodporují HTTP/2, jako je UPW, Xamarin a Unity, můžou jako alternativu použít gRPC-Web.

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" });

Klienty je možné vytvořit také pomocí klientské továrny gRPC. Zprostředkovatel HTTP je nakonfigurovaný pomocí ConfigurePrimaryHttpMessageHandler metody rozšíření.

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

Další informace naleznete v tématu Konfigurace gRPC-Web pomocí klienta .NET gRPC.

Důležité

gRPC-Web vyžaduje, aby ho klient a server podporovaly. gRPC-Web je možné rychle nakonfigurovat serverem ASP.NET Core gRPC. Jiné implementace serveru gRPC vyžadují proxy server pro podporu gRPC-Web.

.NET Framework

Rozhraní .NET Framework má omezenou podporu gRPC přes HTTP/2. Pokud chcete povolit gRPC přes HTTP/2 v rozhraní .NET Framework, nakonfigurujte kanál tak, aby používal WinHttpHandler.

Požadavky a omezení používání WinHttpHandler:

  • Windows 11 nebo novější, Windows Server 2019 nebo novější
    • Klient gRPC je plně podporovaný ve Windows 11 nebo novějším.
    • Klient gRPC je částečně podporovaný v systémech Windows Server 2019 a Windows Server 2022. Podporují se unární metody a metody streamování serveru. Klientské a obousměrné metody streamování se nepodporují .
  • Odkaz na System.Net.Http.WinHttpHandler verzi 6.0.1 nebo novější.
  • Konfigurujte WinHttpHandler v kanálu pomocí GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 nebo novější.
  • Podporují se pouze volání gRPC přes protokol 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

Alternativou pro rozhraní .NET Framework a Xamarin je použití knihovny core-library gRPC C# k volání gRPC. Knihovna core-library jazyka C# gRPC je:

  • Knihovna třetí strany, která podporuje volání gRPC přes PROTOKOL HTTP/2 v rozhraní .NET Framework a Xamarin.
  • Microsoft nepodporuje.
  • V režimu údržby a bude vyřazen ve prospěch gRPC pro .NET.
  • Nedoporučuje se pro nové aplikace.

Další materiály