Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto není nejnovější verze tohoto článku. Aktuální verzi najdete ve verzi .NET 10 tohoto článku.
Upozorňující
Tato verze ASP.NET Core se už nepodporuje. Další informace najdete v zásadách podpory .NET a .NET Core. Aktuální verzi najdete v tomto článku ve verzi .NET 9.
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
- 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í PROTOKOL HTTP/2, jako je UPW 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.WinHttpHandlerverzi 6.0.1 nebo novější. - Konfigurujte
WinHttpHandlerv 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" });
Poznámka:
Klient gRPC v rozhraní .NET Framework je pomalejší než u moderních verzí .NET. Aby se zlepšil výkon gRPC, měly by se aplikace aktualizovat tak, aby používaly moderní .NET.
gRPC C# jádrová knihovna
Alternativou pro rozhraní .NET Framework je použití knihovny 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.
- Microsoft nepodporuje.
- V režimu údržby a bude vyřazen ve prospěch gRPC pro .NET.
- Nedoporučuje se pro nové aplikace.