Nuevo experimento: llamar a los servicios .NET gRPC desde un navegador con gRPC-Web

Nos complace anunciar el soporte experimental para gRPC-Web con .NET. gRPC-Web le permite llamar a gRPC desde aplicaciones basadas en navegador como JavaScript SPA o aplicaciones Blazor WebAssembly.

gRPC-Web para .NET promete traer muchas funciones geniales de gRPC a las aplicaciones del navegador:

  • Clientes generados estrictamente por código
  • Puestos de Protobuf compactos
  • Streaming del servidor



¿Qué es gRPC-Web?


No es posible implementar la especificación gRPC HTTP / 2 en un navegador porque no hay una API de navegador con suficiente control detallado sobre las solicitudes HTTP. gRPC-Web  resuelve este problema al ser compatible con HTTP / 1.1 y HTTP / 2.

gRPC-Web no es una tecnología nueva. Hay un cliente estable  de JavaScript gRPC-Web , así como un  proxy para la traducción entre gRPC y gRPC-Web  para servicios. Los nuevos paquetes experimentales permiten que la aplicación ASP.NET Core gRPC admita gRPC-Web sin un servidor proxy y permite que el cliente .NET Core gRPC invoque los servicios gRPC-Web. (¡Ideal para aplicaciones Blazor WebAssembly!)

Nuevas funciones con gRPC-Web


  • Llame a las aplicaciones ASP.NET Core gRPC desde un navegador: las API del navegador no pueden llamar a gRPC HTTP / 2. gRPC-Web ofrece una alternativa compatible.
    • JavaScript SPA
    • Aplicaciones de ensamblaje web .NET Blazor
  • Hospede aplicaciones ASP.NET Core gRPC en IIS y Azure Application Service. Algunos servidores, como IIS y Azure Application Service, actualmente no pueden alojar servicios gRPC. Mientras trabajan activamente en ello, gRPC-Web ofrece una alternativa interesante, que hoy funciona en cualquier entorno.
  • Llame a gRPC desde plataformas que no sean .NET Core. Algunas plataformas .NET HttpClientno son compatibles con HTTP / 2. gRPC-Web se puede utilizar para invocar servicios gRPC en estas plataformas (por ejemplo, Blazor WebAssembly, Xamarin).

Tenga en cuenta que gRPC-Web es de bajo rendimiento y dos funciones de gRPC ya no son compatibles: transmisión de cliente y transmisión bidireccional. (¡la transmisión al servidor todavía es compatible!)

Instrucciones del servidor web GRPC


Si aún no ha estudiado gRPC en .NET, aquí hay un  tutorial simple para que pueda comenzar .

gRPC-Web no requiere ningún cambio en sus servicios, la única modificación es la configuración inicial. Para habilitar gRPC-Web con el servicio ASP.NET Core gRPC, agregue el enlace al paquete Grpc.AspNetCore.Web . Configure la aplicación para usar gRPC-Web, agregar AddGrpcWeb(...)y UseGrpcWeb()el archivo de inicio: Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddGrpc();
}

public void Configure(IApplicationBuilder app)
{
    app.UseRouting();

    //    gRPC-Web     
    app.UseGrpcWeb();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
    });
}

Llamar a gRPC-Web desde un navegador puede requerir una configuración adicional, por ejemplo, configurar una aplicación para admitir CORS.

Instrucciones de GRPC-Web Client


El cliente gRPC-Web JavaScript tiene instrucciones  para configurar el cliente gRPC-Web para su uso en el navegador JavaScript SPA.

Llamar a gRPC-Web con un cliente .NET es similar al gRPC normal, el único cambio es la forma en que se crea el canal. Para habilitar gRPC-Web, agregue el enlace al paquete Grpc.Net.Client.Web . Configure el canal para usar GrpcWebHandler:

//     gRPC-Web
var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
    {
        HttpClient = new HttpClient(handler)
    });

var client = Greeter.GreeterClient(channel);
var response = await client.SayHelloAsync(new GreeterRequest { Name = ".NET" });

Para ver gRPC-Web con .NET en acción, lea la mejor publicación de blog de nuestro colega que usó  gRPC-Web en Blazor WebAssembly .

Pruebe gRPC-Web con ASP.NET Core hoy


Vista previa de paquetes en NuGet:


Puede encontrar documentación sobre el uso de gRPC-Web con .NET Core  aquí .

Nota: mientras que gRPC-Web para .NET es solo un proyecto piloto, no un producto compatible.

Source: https://habr.com/ru/post/undefined/


All Articles