Używanie klienta gRPC z platformą .NET Standard 2.0
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zobacz wersję tego artykułu platformy .NET 9.
Autor: James Newton-King
W tym artykule omówiono sposób używania klienta gRPC platformy .NET z implementacjami platformy .NET obsługującymi platformę .NET Standard 2.0.
implementacje platformy .NET
Następujące implementacje platformy .NET (lub nowsze) obsługują klienta Grpc.Net.Client , ale nie mają pełnej obsługi protokołu HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Android 8.0
- platforma uniwersalna systemu Windows 10.0.16299
- Unity 2018.1
Klient gRPC platformy .NET może wywoływać usługi z tych implementacji platformy .NET z dodatkową konfiguracją.
Konfiguracja programu HttpHandler
Dostawca HTTP musi być skonfigurowany przy użyciu polecenia GrpcChannelOptions.HttpHandler
. Jeśli program obsługi nie jest skonfigurowany, zostanie zgłoszony błąd:
System.PlatformNotSupportedException
: gRPC wymaga dodatkowej konfiguracji, aby pomyślnie wykonywać wywołania RPC w implementacjach platformy .NET, które nie mają obsługi gRPC za pośrednictwem protokołu HTTP/2. Dostawca HTTP musi być określony przy użyciu poleceniaGrpcChannelOptions.HttpHandler
. Skonfigurowany dostawca HTTP musi obsługiwać protokół HTTP/2 lub być skonfigurowany do korzystania z usługi gRPC-Web.
Implementacje platformy .NET, które nie obsługują protokołu HTTP/2, takich jak platforma UWP, platforma Xamarin i aparat Unity, mogą użyć biblioteki gRPC-Web jako alternatywy.
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" });
Klienci można również utworzyć przy użyciu fabryki klienta gRPC. Dostawca HTTP jest skonfigurowany przy użyciu ConfigurePrimaryHttpMessageHandler metody rozszerzenia.
builder.Services
.AddGrpcClient<Greet.GreeterClient>(options =>
{
options.Address = new Uri("https://localhost:5001");
})
.ConfigurePrimaryHttpMessageHandler(
() => new GrpcWebHandler(new HttpClientHandler()));
Aby uzyskać więcej informacji, zobacz Konfigurowanie usługi gRPC-Web przy użyciu klienta gRPC platformy .NET.
Ważne
gRPC-Web wymaga, aby klient i serwer go obsługiwał. Serwer gRPC-Web można szybko skonfigurować przez serwer gRPC ASP.NET Core gRPC. Inne implementacje serwera gRPC wymagają serwera proxy do obsługi gRPC-Web.
.NET Framework
Program .NET Framework ma ograniczoną obsługę funkcji gRPC za pośrednictwem protokołu HTTP/2. Aby włączyć funkcję gRPC za pośrednictwem protokołu HTTP/2 na platformie .NET Framework, skonfiguruj kanał do użycia .WinHttpHandler
Wymagania i ograniczenia dotyczące korzystania z programu WinHttpHandler
:
- Windows 11 lub nowszy, Windows Server 2019 lub nowszy.
- Klient gRPC jest w pełni obsługiwany w systemie Windows 11 lub nowszym.
- Klient gRPC jest częściowo obsługiwany w systemach Windows Server 2019 i Windows Server 2022. Obsługiwane są metody przesyłania strumieniowego jednoargumentowego i serwera. Metody przesyłania strumieniowego klienta i dwukierunkowego nie są obsługiwane.
- Odwołanie do
System.Net.Http.WinHttpHandler
wersji 6.0.1 lub nowszej. - Skonfiguruj
WinHttpHandler
w kanale przy użyciu poleceniaGrpcChannelOptions.HttpHandler
. - .NET Framework 4.6.1 lub nowszy.
- Obsługiwane są tylko wywołania gRPC za pośrednictwem protokołu TLS.
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
Alternatywną opcją dla platformy .NET Framework i platformy Xamarin jest użycie podstawowej biblioteki gRPC C# do wykonywania wywołań gRPC. Biblioteka podstawowa języka C# gRPC to:
- Biblioteka innej firmy, która obsługuje wykonywanie wywołań gRPC za pośrednictwem protokołu HTTP/2 na platformie .NET Framework i Xamarin.
- Firma Microsoft nie jest obsługiwana.
- W trybie konserwacji i będzie przestarzały na rzecz gRPC dla platformy .NET.
- Niezalecane w przypadku nowych aplikacji.