Använda gRPC-klienten med .NET Standard 2.0

Notera

Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i .NET 10-versionen av den här artikeln.

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. För den aktuella versionen, se den .NET 9 version av den här artikeln.

Av James Newton-King

I den här artikeln beskrivs hur du använder .NET gRPC-klienten med .NET-implementeringar som stöder .NET Standard 2.0-.

.NET-implementeringar

Följande .NET-implementeringar (eller senare) stöder Grpc.Net.Client men har inte fullt stöd för HTTP/2:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Universell Windows-plattform 10.0.16299
  • Unity 2018.1

.NET gRPC-klienten kan anropa tjänster från dessa .NET-implementeringar med ytterligare konfiguration.

HttpHandler-konfiguration

En HTTP-provider måste konfigureras med hjälp av GrpcChannelOptions.HttpHandler. Om en hanterare inte har konfigurerats utlöses ett fel:

System.PlatformNotSupportedException: gRPC kräver extra konfiguration för att kunna göra RPC-anrop på .NET-implementeringar som inte har stöd för gRPC via HTTP/2. En HTTP-provider måste anges med hjälp av GrpcChannelOptions.HttpHandler. Den konfigurerade HTTP-providern måste antingen ha stöd för HTTP/2 eller konfigureras för att använda gRPC-Web.

.NET-implementeringar som inte stöder HTTP/2, till exempel UWP och Unity, kan använda gRPC-Web som ett alternativ.

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

Klienter kan också skapas med hjälp av gRPC-klientfabriken. En HTTP-provider konfigureras med hjälp av ConfigurePrimaryHttpMessageHandler-tilläggsmetoden.

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

Mer information finns i Konfigurera gRPC-Web med .NET gRPC-klienten.

Viktig

gRPC-Web kräver att klienten och servern för att stödja den. gRPC-Web kan snabbt konfigureras av en ASP.NET Core gRPC-server. Andra gRPC-serverimplementeringar kräver en proxy för att stödja gRPC-Web.

.NET Framework

.NET Framework har begränsat stöd för gRPC via HTTP/2. Om du vill aktivera gRPC via HTTP/2 på .NET Framework konfigurerar du kanalen så att den använder WinHttpHandler.

Krav och begränsningar för användning av WinHttpHandler:

  • Windows 11 eller senare, Windows Server 2019 eller senare.
    • gRPC-klienten stöds fullt ut i Windows 11 eller senare.
    • gRPC-klienten stöds delvis på Windows Server 2019 och Windows Server 2022. Unary- och serverströmningsmetoder stöds. Klient- och dubbelriktade strömningsmetoder stöds inte.
  • En referens till System.Net.Http.WinHttpHandler version 6.0.1 eller senare.
  • Konfigurera WinHttpHandler på kanalen med hjälp av GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 eller senare.
  • Endast gRPC-anrop via TLS stöds.
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" });

Notera

GRPC-klienten på .NET Framework är långsammare än i moderna .NET-versioner. För bättre gRPC-prestanda bör appar uppdateras för att använda modern .NET.

gRPC C# kärnbibliotek

Ett alternativt alternativ för .NET Framework har varit att använda gRPC C# core-library för att göra gRPC-anrop. gRPC C#-kärnbiblioteket är:

  • Ett bibliotek från tredje part som stöder gRPC-anrop via HTTP/2 på .NET Framework.
  • Stöds inte av Microsoft.
  • I underhållsläge och kommer att inaktuell till förmån för gRPC för .NET.
  • Rekommenderas inte för nya appar.

Ytterligare resurser