Gunakan klien gRPC dengan .NET Standard 2.0

Oleh James Newton-King

Artikel ini membahas cara menggunakan klien .NET gRPC dengan implementasi .NET yang mendukung .NET Standard 2.0.

Implementasi .NET

Implementasi .NET berikut (atau yang lebih baru) mendukung Grpc.Net.Client tetapi tidak memiliki dukungan penuh untuk HTTP/2:

  • .NET Core 2.1
  • .NET Framework 4.6.1
  • Mono 5.4
  • Xamarin.iOS 10.14
  • Xamarin.Android 8.0
  • Platform Windows Universal 10.0.16299
  • Unity 2018.1

Klien .NET gRPC dapat memanggil layanan dari implementasi .NET ini dengan beberapa konfigurasi tambahan.

Konfigurasi HttpHandler

Penyedia HTTP harus dikonfigurasi menggunakan GrpcChannelOptions.HttpHandler. Jika handler tidak dikonfigurasi, kesalahan akan muncul:

System.PlatformNotSupportedException: gRPC memerlukan konfigurasi tambahan untuk berhasil melakukan panggilan RPC pada implementasi .NET yang tidak memiliki dukungan untuk gRPC melalui HTTP/2. Penyedia HTTP harus ditentukan menggunakan GrpcChannelOptions.HttpHandler. Penyedia HTTP yang dikonfigurasi harus mendukung HTTP/2 atau dikonfigurasi untuk menggunakan gRPC-Web.

Implementasi .NET yang tidak mendukung HTTP/2, seperti UWP, Xamarin, dan Unity, dapat menggunakan gRPC-Web sebagai alternatif.

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

Klien juga dapat dibuat menggunakan pabrik klien gRPC. Penyedia HTTP dikonfigurasi menggunakan ConfigurePrimaryHttpMessageHandler metode ekstensi.

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

Untuk informasi selengkapnya, lihat Mengonfigurasi gRPC-Web dengan klien .NET gRPC.

Penting

gRPC-Web mengharuskan klien dan server untuk mendukungnya. gRPC-Web dapat dengan cepat dikonfigurasi oleh server gRPC ASP.NET Core. Implementasi server gRPC lainnya memerlukan proksi untuk mendukung gRPC-Web.

.NET Framework

.NET Framework memiliki dukungan terbatas untuk gRPC melalui HTTP/2. Untuk mengaktifkan gRPC melalui HTTP/2 pada .NET Framework, konfigurasikan saluran untuk menggunakan WinHttpHandler.

Persyaratan dan batasan untuk menggunakan WinHttpHandler:

  • Windows 11 atau yang lebih baru, Windows Server 2019 atau yang lebih baru.
    • Klien gRPC didukung penuh pada Windows 11 atau yang lebih baru.
    • Klien gRPC didukung sebagian pada Windows Server 2019 dan Windows Server 2022. Metode streaming unary dan server didukung. Metode streaming klien dan dua arah tidak didukung.
  • Referensi ke System.Net.Http.WinHttpHandler versi 6.0.1 atau yang lebih baru.
  • Konfigurasikan WinHttpHandler pada saluran menggunakan GrpcChannelOptions.HttpHandler.
  • .NET Framework 4.6.1 atau yang lebih baru.
  • Hanya panggilan gRPC melalui TLS yang didukung.
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# core-library

Opsi alternatif untuk .NET Framework dan Xamarin adalah menggunakan gRPC C# core-library untuk melakukan panggilan gRPC. gRPC C# core-library adalah:

  • Pustaka pihak ketiga yang mendukung panggilan gRPC melalui HTTP/2 di .NET Framework dan Xamarin.
  • Tidak didukung oleh Microsoft.
  • Dalam mode pemeliharaan dan tidak akan digunakan lagi mendukung gRPC untuk .NET.
  • Tidak disarankan untuk aplikasi baru.

Sumber daya tambahan