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
HttpClient
nã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.cspublic 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.