gRPC-client gebruiken met .NET Standard 2.0
Notitie
Dit is niet de nieuwste versie van dit artikel. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Waarschuwing
Deze versie van ASP.NET Core wordt niet meer ondersteund. Zie de .NET- en .NET Core-ondersteuningsbeleidvoor meer informatie. Zie de .NET 9-versie van dit artikelvoor de huidige release.
Belangrijk
Deze informatie heeft betrekking op een pre-releaseproduct dat aanzienlijk kan worden gewijzigd voordat het commercieel wordt uitgebracht. Microsoft geeft geen garanties, uitdrukkelijk of impliciet, met betrekking tot de informatie die hier wordt verstrekt.
Zie de .NET 9-versie van dit artikelvoor de huidige release.
Door James Newton-King
In dit artikel wordt beschreven hoe u de .NET gRPC-client gebruikt met .NET-implementaties die ondersteuning bieden voor .NET Standard 2.0.
.NET-implementaties
De volgende .NET-implementaties (of hoger) ondersteunen Grpc.Net.Client, maar hebben geen volledige ondersteuning voor HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Universal Windows Platform 10.0.16299
- Unity 2018.1
De .NET gRPC-client kan services aanroepen vanuit deze .NET-implementaties met een extra configuratie.
HttpHandler-configuratie
Een HTTP-provider moet worden geconfigureerd met behulp van GrpcChannelOptions.HttpHandler
. Als een handler niet is geconfigureerd, treedt er een fout op:
System.PlatformNotSupportedException
: gRPC vereist extra configuratie om RPC-aanroepen uit te voeren op .NET-implementaties die geen ondersteuning hebben voor gRPC via HTTP/2. Er moet een HTTP-provider worden opgegeven met behulp vanGrpcChannelOptions.HttpHandler
. De geconfigureerde HTTP-provider moet HTTP/2 ondersteunen of worden geconfigureerd voor het gebruik van gRPC-Web.
.NET-implementaties die geen ondersteuning bieden voor HTTP/2, zoals UWP en Unity, kunnen gRPC-Web als alternatief gebruiken.
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 kunnen ook worden gemaakt met behulp van de gRPC-client-factory. Een HTTP-provider wordt geconfigureerd met behulp van de ConfigurePrimaryHttpMessageHandler-extensiemethode.
builder.Services
.AddGrpcClient<Greet.GreeterClient>(options =>
{
options.Address = new Uri("https://localhost:5001");
})
.ConfigurePrimaryHttpMessageHandler(
() => new GrpcWebHandler(new HttpClientHandler()));
Zie gRPC-Web configureren met de .NET gRPC-clientvoor meer informatie.
Belangrijk
gRPC-Web vereist dat de client-en server deze ondersteunen. gRPC-Web kan snel worden geconfigureerd door een ASP.NET Core gRPC-server. Voor andere gRPC-server-implementaties is een proxy vereist om gRPC-Web te ondersteunen.
.NET Framework
.NET Framework biedt beperkte ondersteuning voor gRPC via HTTP/2. Als u gRPC via HTTP/2 op .NET Framework wilt inschakelen, configureert u het kanaal voor het gebruik van WinHttpHandler.
Vereisten en beperkingen voor het gebruik van WinHttpHandler
:
- Windows 11 of hoger, Windows Server 2019 of hoger.
- gRPC-client wordt volledig ondersteund in Windows 11 of hoger.
- gRPC-client wordt gedeeltelijk ondersteund op Windows Server 2019 en Windows Server 2022. Unaire en serverstreamingmethoden worden ondersteund. Client- en bidirectionele streamingmethoden worden niet ondersteund.
- Een verwijzing naar
System.Net.Http.WinHttpHandler
versie 6.0.1 of hoger. - Configureer
WinHttpHandler
op het kanaal met behulp vanGrpcChannelOptions.HttpHandler
. - .NET Framework 4.6.1 of hoger.
- Alleen gRPC-aanroepen via TLS worden ondersteund.
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#-kernbibliotheek
Een alternatieve optie voor .NET Framework is het gebruik van gRPC C# core-library om gRPC-aanroepen te maken. gRPC C#-kernbibliotheek is:
- Een bibliotheek van derden die ondersteuning biedt voor het maken van gRPC-aanroepen via HTTP/2 op .NET Framework.
- Niet ondersteund door Microsoft.
- In onderhoudsstatus en wordt afgeschaft ten gunste van gRPC voor .NET.
- Niet aanbevolen voor nieuwe apps.