Nova experiência: Chamando serviços .NET gRPC de um navegador com gRPC-Web

Temos o prazer de anunciar o suporte experimental para o gRPC-Web com .NET. O gRPC-Web permite chamar o gRPC a partir de aplicativos baseados em navegador, como JavaScript SPA ou Blazor WebAssembly.

O gRPC-Web for .NET promete trazer muitos recursos excelentes de gRPC para aplicativos de navegador:

  • Clientes gerados por código estritamente digitados
  • Posts Protobuf compactos
  • Streaming de servidor



O que é gRPC-Web


Não é possível implementar a especificação gRPC HTTP / 2 em um navegador porque não há API do navegador com controle detalhado suficiente sobre solicitações HTTP. O gRPC-Web  resolve esse problema sendo compatível com HTTP / 1.1 e HTTP / 2.

O gRPC-Web não é uma nova tecnologia. Existe um cliente JavaScript gRPC-Web estável  , bem como um  proxy para tradução entre gRPC e gRPC-Web  for services. Novos pacotes experimentais permitem que o aplicativo ASP.NET Core gRPC ofereça suporte ao gRPC-Web sem um servidor proxy e permita que o cliente gRPC do .NET Core chame os serviços gRPC-Web. (Ótimo para aplicativos Blazor WebAssembly!)

Novos recursos com gRPC-Web


  • Chamar aplicativos gRPC do ASP.NET Core a partir de um navegador - as APIs do navegador não podem chamar gRPC HTTP / 2. O gRPC-Web oferece uma alternativa compatível.
    • JavaScript SPA
    • Aplicativos .NET Blazor Web Assembly
  • Hospede aplicativos gRPC do ASP.NET Core no IIS e no Serviço de Aplicativo do Azure. Alguns servidores, como o IIS e o Serviço de Aplicativo do Azure, atualmente não conseguem hospedar serviços de gRPC. Enquanto eles estão trabalhando ativamente, o gRPC-Web oferece uma alternativa interessante que hoje funciona em qualquer ambiente.
  • Ligue para o gRPC de plataformas diferentes do .NET Core. Algumas plataformas .NET HttpClientnão suportam HTTP / 2. O gRPC-Web pode ser usado para chamar serviços de gRPC nessas plataformas (por exemplo, Blazor WebAssembly, Xamarin).

Observe que o gRPC-Web tem baixo desempenho e dois recursos de gRPC não são mais suportados: streaming de cliente e streaming de mão dupla. (a transmissão para o servidor ainda é suportada!)

Instruções do servidor da Web GRPC


Se você ainda não estudou o gRPC no .NET, aqui está um  tutorial simples para começar .

O gRPC-Web não requer nenhuma alteração nos seus serviços; a única modificação é a configuração inicial. Para habilitar o gRPC-Web com o serviço ASP.NET Core gRPC, adicione o link ao pacote Grpc.AspNetCore.Web . Configure o aplicativo para usar o gRPC-Web, adicionar AddGrpcWeb(...)e UseGrpcWeb()o arquivo de inicialização: 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();
    });
}

Chamar gRPC-Web a partir de um navegador pode exigir configuração adicional, por exemplo, a configuração de um aplicativo para suportar o CORS.

Instruções do cliente da Web GRPC


O cliente gRPC-Web JavaScript possui instruções  para configurar o cliente gRPC-Web para uso no navegador JavaScript JavaScript.

Chamar gRPC-Web com um cliente .NET é semelhante ao gRPC normal, a única alteração é a maneira como o canal é criado. Para habilitar o gRPC-Web, adicione o link ao pacote Grpc.Net.Client.Web . Configure o 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 o gRPC-Web com .NET em ação, leia a postagem mais legal do blog de nosso colega que usou o  gRPC-Web no Blazor WebAssembly .

Experimente o gRPC-Web com o ASP.NET Core hoje


Visualizar pacotes no NuGet:


Você pode encontrar documentação sobre o uso do gRPC-Web com o .NET Core  aqui .

Nota: enquanto o gRPC-Web for .NET é apenas um projeto piloto, não um produto suportado.

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


All Articles