Verwenden des gRPC-Clients mit .NET Standard 2.0

Von James Newton-King

In diesem Artikel wird erläutert, wie Sie den .NET gRPC-Client mit .NET-Implementierungen verwenden, die .NET Standard 2.0 unterstützen.

.NET-Implementierungen

Die folgenden .NET-Implementierungen (oder höher) unterstützen GrpC.net.Client, weisen jedoch keine vollständige Unterstützung für HTTP/2 auf:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • Universelle Windows-Plattform 10.0.16299
  • Unity 2018.1

Der .NET gRPC-Client kann mit einigen zusätzlichen Konfigurationen Dienste aus diesen .NET-Implementierungen aufrufen.

HttpHandler-Konfiguration

Ein HTTP-Anbieter muss mithilfe von GrpcChannelOptions.HttpHandler konfiguriert werden. Wenn kein Handler konfiguriert wird, wird ein Fehler ausgelöst:

System.PlatformNotSupportedException: gRPC erfordert eine zusätzliche Konfiguration, um RPC-Aufrufe für .NET-Implementierungen erfolgreich durchführen zu können, die keine Unterstützung für gRPC über HTTP/2 haben. Ein HTTP-Anbieter muss mithilfe von GrpcChannelOptions.HttpHandler konfiguriert werden. Der konfigurierte HTTP-Anbieter muss entweder HTTP/2 unterstützen oder für die Verwendung von gRPC-Web konfiguriert sein.

.NET-Implementierungen, die HTTP/2 nicht unterstützen (z. B. UWP, Xamarin und Unity) können gRPC-Web als Alternative verwenden.

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

Clients können auch mit der gRPC-Clientfactory erstellt werden. Ein HTTP-Anbieter wird mithilfe der ConfigurePrimaryHttpMessageHandler-Erweiterungsmethode konfiguriert.

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

Weitere Informationen finden Sie unter Konfigurieren von gRPC-Web mit dem .NET gRPC-Client.

Wichtig

gRPC-Web setzt die Unterstützung durch Client und Server voraus. gRPC-Web kann schnell von einem ASP.NET Core gRPC-Server konfiguriert werden. Andere gRPC-Serverimplementierungen erfordern einen Proxy zur Unterstützung von gRPC-Web.

.NET Framework

.NET Framework bietet eingeschränkte Unterstützung für gRPC über HTTP/2. Um gRPC über HTTP/2 unter .NET Framework zu aktivieren, konfigurieren Sie den Kanal für die Verwendung von WinHttpHandler.

Anforderungen und Einschränkungen für die Verwendung von WinHttpHandler:

  • Windows 11 oder höher, Windows Server 2019 oder höher.
    • gRPC-Client wird unter Windows 11 oder höher vollständig unterstützt.
    • Der gRPC-Client wird unter Windows Server 2019 und Windows Server 2022 teilweise unterstützt. Unäre und serverstreamende gRPC-Methoden werden unterstützt. Client- und bidirektionale Streamingmethoden werden nicht unterstützt.
  • Ein Verweis auf System.Net.Http.WinHttpHandler, Version 6.0.1 oder höher.
  • Konfigurieren Sie WinHttpHandler für den Kanal mithilfe von GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 oder höher
  • Nur gRPC-Aufrufe über TLS werden unterstützt.
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#-Kernbibliothek

Als alternative Option zu .NET Framework und Xamarin bietet sich die Verwendung der gRPC-C#-Kernbibliothek für gRPC-Aufrufe an. Die gRPC-C#-Kernbibliothek:

Zusätzliche Ressourcen