Použití klienta gRPC s .NET Standard 2.0
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v tématu .NET a .NET Core Zásady podpory. Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Důležité
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Aktuální verzi najdete ve verzi .NET 8 tohoto článku.
Autor: James Newton-King
Tento článek popisuje, jak používat klienta .NET gRPC s implementacemi .NET, které podporují .NET Standard 2.0.
Implementace .NET
Následující implementace .NET (nebo novější) podporují Grpc.Net.Client , ale nemají úplnou podporu pro HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Android 8.0
- Univerzální platforma Windows 10.0.16299
- Unity 2018.1
Klient .NET gRPC může volat služby z těchto implementací .NET s určitou další konfigurací.
Konfigurace obslužné rutiny Http
Zprostředkovatel HTTP musí být nakonfigurován pomocí GrpcChannelOptions.HttpHandler
. Pokud není nakonfigurovaná obslužná rutina, vyvolá se chyba:
System.PlatformNotSupportedException
: GRPC vyžaduje dodatečnou konfiguraci pro úspěšné volání RPC u implementací .NET, které nepodporují gRPC přes HTTP/2. Zprostředkovatel HTTP musí být zadán pomocíGrpcChannelOptions.HttpHandler
. Nakonfigurovaný zprostředkovatel HTTP musí podporovat protokol HTTP/2 nebo musí být nakonfigurovaný tak, aby používal gRPC-Web.
Implementace .NET, které nepodporují HTTP/2, jako je UPW, Xamarin a Unity, můžou jako alternativu použít gRPC-Web.
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" });
Klienty je možné vytvořit také pomocí klientské továrny gRPC. Zprostředkovatel HTTP je nakonfigurovaný pomocí ConfigurePrimaryHttpMessageHandler metody rozšíření.
builder.Services
.AddGrpcClient<Greet.GreeterClient>(options =>
{
options.Address = new Uri("https://localhost:5001");
})
.ConfigurePrimaryHttpMessageHandler(
() => new GrpcWebHandler(new HttpClientHandler()));
Další informace naleznete v tématu Konfigurace gRPC-Web pomocí klienta .NET gRPC.
Důležité
gRPC-Web vyžaduje, aby ho klient a server podporovaly. gRPC-Web je možné rychle nakonfigurovat serverem ASP.NET Core gRPC. Jiné implementace serveru gRPC vyžadují proxy server pro podporu gRPC-Web.
.NET Framework
Rozhraní .NET Framework má omezenou podporu gRPC přes HTTP/2. Pokud chcete povolit gRPC přes HTTP/2 v rozhraní .NET Framework, nakonfigurujte kanál tak, aby používal WinHttpHandler.
Požadavky a omezení používání WinHttpHandler
:
- Windows 11 nebo novější, Windows Server 2019 nebo novější
- Klient gRPC je plně podporovaný ve Windows 11 nebo novějším.
- Klient gRPC je částečně podporovaný v systémech Windows Server 2019 a Windows Server 2022. Podporují se unární metody a metody streamování serveru. Klientské a obousměrné metody streamování se nepodporují .
- Odkaz na
System.Net.Http.WinHttpHandler
verzi 6.0.1 nebo novější. - Konfigurujte
WinHttpHandler
v kanálu pomocíGrpcChannelOptions.HttpHandler
. - .NET Framework 4.6.1 nebo novější.
- Podporují se pouze volání gRPC přes protokol 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
Alternativou pro rozhraní .NET Framework a Xamarin je použití knihovny core-library gRPC C# k volání gRPC. Knihovna core-library jazyka C# gRPC je:
- Knihovna třetí strany, která podporuje volání gRPC přes PROTOKOL HTTP/2 v rozhraní .NET Framework a Xamarin.
- Microsoft nepodporuje.
- V režimu údržby a bude vyřazen ve prospěch gRPC pro .NET.
- Nedoporučuje se pro nové aplikace.