Uso del cliente gRPC con .NET Standard 2.0
Nota:
Esta no es la versión más reciente de este artículo. Para la versión actual, consulte la versión .NET 8 de este artículo.
Advertencia
Esta versión de ASP.NET Core ya no se admite. Para obtener más información, consulte la Directiva de soporte técnico de .NET y .NET Core. Para la versión actual, consulte la versión .NET 8 de este artículo.
Importante
Esta información hace referencia a un producto en versión preliminar, el cual puede sufrir importantes modificaciones antes de que se publique la versión comercial. Microsoft no proporciona ninguna garantía, expresa o implícita, con respecto a la información proporcionada aquí.
Para la versión actual, consulte la versión .NET 8 de este artículo.
En este artículo se describe cómo usar el cliente gRPC para .NET con implementaciones de .NET que admiten .NET Standard 2.0.
Implementaciones de .NET
Las siguientes implementaciones de .NET (o versiones posteriores) admiten Grpc.Net.Client, pero no son totalmente compatibles con HTTP/2:
- .NET Core 2.1
- .NET Framework 4.6.1
- Mono 5.4
- Xamarin.iOS 10.14
- Xamarin.Android 8.0
- Plataforma universal de Windows 10.0.16299
- Unity 2018.1
El cliente gRPC para .NET puede llamar a los servicios de dichas implementaciones de .NET con algunas opciones de configuración adicionales.
Configuración de HttpHandler
Es necesario configurar un proveedor HTTP con GrpcChannelOptions.HttpHandler
. Si algún controlador no se configura, se generará un error:
System.PlatformNotSupportedException
: gRPC requiere algunas opciones de configuración adicionales para poder realizar correctamente las llamadas de RPC en implementaciones de .NET que no admitan gRPC mediante HTTP/2. Es necesario especificar un proveedor HTTP conGrpcChannelOptions.HttpHandler
. El proveedor HTTP configurado debe admitir HTTP/2 o estar configurado para usar gRPC-Web.
Las implementaciones de .NET que no admitan HTTP/2, como UWP, Xamarin y Unity, pueden usar gRPC-Web como alternativa.
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" });
Los clientes también se pueden crear mediante la fábrica de cliente de gRPC. Un proveedor HTTP se configura mediante el método de extensión ConfigurePrimaryHttpMessageHandler.
builder.Services
.AddGrpcClient<Greet.GreeterClient>(options =>
{
options.Address = new Uri("https://localhost:5001");
})
.ConfigurePrimaryHttpMessageHandler(
() => new GrpcWebHandler(new HttpClientHandler()));
Para obtener más información, consulte Configuración de gRPC-Web con el cliente gRPC de .NET.
Importante
gRPC-Web requiere que el cliente y el servidor lo admitan. gRPC-Web se puede configurar rápidamente mediante un servidor gRPC de ASP.NET Core. Otras implementaciones del servidor gRPC requieren un proxy para admitir gRPC-Web.
.NET Framework
La compatibilidad de .NET Framework con gRPC por medio de HTTP/2 es limitada. Para habilitar gRPC por medio de HTTP/2 en .NET Framework, configure el canal para usar WinHttpHandler.
Requisitos y restricciones referentes al uso de WinHttpHandler
:
- Windows 11 o posterior; Windows Server 2019 o posterior.
- El cliente gRPC es totalmente compatible con Windows 11 o posterior.
- El cliente gRPC se admite parcialmente en Windows Server 2019 y Windows Server 2022. Se admiten métodos de flujos de servidores y unarios. No se admiten métodos de flujo bidireccionales y de cliente.
- Una referencia a
System.Net.Http.WinHttpHandler
, versión 6.0.1 o posterior. - Configure
WinHttpHandler
en el canal conGrpcChannelOptions.HttpHandler
. - .NET Framework 4.6.1 o superior.
- Solo se admiten llamadas de gRPC por medio de 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" });
Biblioteca de gRPC C# core
A la hora de realizar llamadas de gRPC, una alternativa para .NET Framework y Xamarin es usar la biblioteca principal de C# para gRPC. La biblioteca principal de C# para gRPC:
- Es una biblioteca de terceros que permite realizar llamadas de gRPC por medio de HTTP/2 en .NET Framework y Xamarin.
- No es compatible con Microsoft.
- Está en modo de mantenimiento y dejará de utilizarse en favor de gRPC para .NET.
- No se recomienda para las aplicaciones nuevas.