Dela via


Använda gRPC-klienten med .NET Standard 2.0

Notera

Det här är inte den senaste versionen av den här artikeln. För den aktuella versionen, se den .NET 9 version 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 utgåvan, se .NET 9-versionen av denna artikel.

Viktig

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

För den aktuella utgåvan, se version .NET 9 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
  • Universal Windows Platform 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" });

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