Aracılığıyla paylaş


.NET Standard 2.0 ile gRPC istemcisi kullanma

Yayınlayan James Newton-King

Bu makalede .NET Standard 2.0'ı destekleyen .NET uygulamalarıyla .NET gRPC istemcisinin nasıl kullanılacağı açıklanır.

.NET uygulamaları

Aşağıdaki .NET uygulamaları (veya üzeri) Grpc.Net.Client'ı destekler ancak HTTP/2 için tam desteğe sahip değildir:

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

.NET gRPC istemcisi, bazı ek yapılandırmalarla bu .NET uygulamalarından hizmetleri çağırabilir.

HttpHandler yapılandırması

BIR HTTP sağlayıcısı kullanılarak GrpcChannelOptions.HttpHandleryapılandırılmalıdır. İşleyici yapılandırılmamışsa bir hata oluşur:

System.PlatformNotSupportedException: gRPC, HTTP/2 üzerinden gRPC desteği olmayan .NET uygulamalarında başarılı bir şekilde RPC çağrıları yapmak için ek yapılandırma gerektirir. kullanılarak GrpcChannelOptions.HttpHandlerbir HTTP sağlayıcısı belirtilmelidir. Yapılandırılan HTTP sağlayıcısıNıN HTTP/2'yi desteklemesi veya gRPC-Web kullanacak şekilde yapılandırılması gerekir.

UWP, Xamarin ve Unity gibi HTTP/2'yi desteklemeyen .NET uygulamaları alternatif olarak gRPC-Web kullanabilir.

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

İstemciler gRPC istemci fabrikası kullanılarak da oluşturulabilir. Bir HTTP sağlayıcısı, uzantı yöntemi kullanılarak ConfigurePrimaryHttpMessageHandler yapılandırılır.

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

Daha fazla bilgi için bkz . .NET gRPC istemcisiyle gRPC-Web'i yapılandırma.

Önemli

gRPC-Web, istemcinin ve sunucunun bunu desteklemesini gerektirir. gRPC-Web, ASP.NET Core gRPC sunucusu tarafından hızla yapılandırılabilir. Diğer gRPC sunucu uygulamaları, gRPC-Web'i desteklemek için bir ara sunucu gerektirir.

.NET Framework

.NET Framework, HTTP/2 üzerinden gRPC için sınırlı desteğe sahiptir. .NET Framework'te HTTP/2 üzerinden gRPC'yi etkinleştirmek için kanalı kullanacak WinHttpHandlerşekilde yapılandırın.

kullanma WinHttpHandlergereksinimleri ve kısıtlamaları:

  • Windows 11 veya üzeri, Windows Server 2019 veya üzeri.
    • gRPC istemcisi Windows 11 veya sonraki sürümlerde tam olarak desteklenir.
    • gRPC istemcisi Windows Server 2019 ve Windows Server 2022'de kısmen desteklenir. Tekli ve sunucu akış yöntemleri desteklenir. İstemci ve çift yönlü akış yöntemleri desteklenmez .
  • 6.0.1 veya sonraki bir sürüme System.Net.Http.WinHttpHandler başvuru.
  • kullanarak GrpcChannelOptions.HttpHandlerkanalda yapılandırınWinHttpHandler.
  • .NET Framework 4.6.1 veya üzeri.
  • Yalnızca TLS üzerinden gRPC çağrıları desteklenir.
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# çekirdek kitaplığı

GRPC çağrıları yapmak için gRPC C# çekirdek kitaplığını kullanmak .NET Framework ve Xamarin için alternatif bir seçenektir. gRPC C# çekirdek kitaplığı:

Ek kaynaklar