Verwenden des gRPC-Clients mit .NET Standard 2.0
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 vonGrpcChannelOptions.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 vonGrpcChannelOptions.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:
- ist eine Drittanbieterbibliothek, die das Ausführen von gRPC-Aufrufen über HTTP/2 für .NET Framework und Xamarin unterstützt.
- wird von Microsoft nicht unterstützt.
- befindet sich im Wartungsmodus, wird als veraltet eingestuft und durch gRPC für .NET ersetzt.
- wird für neue Apps nicht empfohlen.
Zusätzliche Ressourcen
ASP.NET Core
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Einreichen und Feedback anzeigen für