Freigeben über


Verwenden des gRPC-Clients mit .NET Standard 2.0

Hinweis

Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.

Warnung

Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der .NET- und .NET Core-Supportrichtlinie. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.

Wichtig

Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.

Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.

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