专栏首页依乐祝一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

今天给大家翻译一篇由ASP.NET

.NET的gRPC-Web承诺将gRPC的许多出色功能引入浏览器应用程序:

  • 强类型代码生成的客户端
  • 紧凑的Protobuf消息
  • 服务流

什么是gRPC-Web

无法在浏览器中实现gRPC HTTP / 2规范,因为没有浏览器API能够对HTTP请求进行足够的细粒度控制。gRPC-Web通过与HTTP / 1.1和HTTP / 2进行兼容来解决此问题。

gRPC-Web不是一项新技术。已经有一个稳定的gRPC-Web JavaScript客户端,以及一个用于在gRPC和gRPC-Web之间进行转换的代理 。新的实验性程序包允许ASP.NET Core gRPC应用程序支持带代理的gRPC-Web ,并允许.NET Core gRPC客户端调用gRPC-Web服务。(非常适合Blazor WebAssembly应用!)

使用gRPC-Web的新场景

  • 从浏览器调用ASP.NET Core gRPC应用程序 –浏览器API无法调用gRPC HTTP / 2。gRPC-Web提供了一个兼容的替代方案。
    • JavaScript SPA
    • .NET Blazor Web Assembly应用
  • 在IIS和Azure App Service中托管ASP.NET Core gRPC应用程序 –某些服务器(例如IIS和Azure App Service)当前无法托管gRPC服务。在积极研究这一问题的同时,gRPC-Web提供了一种有趣的替代方案,可在当今的每个环境中使用。
  • 从非.NET Core平台调用gRPC –一些.NET平台HttpClient不支持HTTP / 2。gRPC-Web可用于在这些平台(例如Blazor WebAssembly,Xamarin)上调用gRPC服务。

请注意,gRPC-Web的性能成本较低,并且不再支持两个gRPC功能:客户端流和双向流。(仍然支持服务端流!)

服务端gRPC-Web说明

如果您是.NET中gRPC的新手,那么这里有一个简单的入门指南

gRPC-Web不需要对服务进行任何更改,唯一的修改是启动配置。要在ASP.NET Core gRPC服务中启用gRPC-Web,请添加对Grpc.AspNetCore.Web包的引用。通过在启动文件中添加AddGrpcWeb(...)UseGrpcWeb(),将应用程序配置为使用gRPC-Web :

Startup.cs

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

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

    // Add gRPC-Web middleware after routing and before endpoints
    app.UseGrpcWeb();

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

从浏览器调用gRPC-Web可能需要一些其他配置,例如将应用程序配置为支持CORS。

客户端gRPC-Web说明

JavaScript的gRPC的Web客户端有关于设置gRPC Web客户端以在浏览器JavaScript SPAs中使用的说明

使用.NET客户端调用gRPC-Web与常规gRPC相同,唯一的修改是创建通道的方式。要启用gRPC-Web,请添加对Grpc.Net.Client.Web包的引用。配置通道以使用GrpcWebHandler

// Configure a channel to use 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" });

要查看运行.NET的gRPC-Web,请花点时间阅读由Steve Sanderson撰写的精彩博客,该博客在Blazor WebAssembly中使用gRPC-Web

立即尝试在ASP.NET Core中使用gRPC-Web

NuGet上的预览包:

可以在此处找到将gRPC-Web与.NET Core一起使用的文档。

.NET的gRPC-Web是一个实验性项目,而不是稳定发布的产品。我们想测试一下我们实现gRPC-Web的方法是否有效,并获得反馈,与通过代理设置gRPC-Web的传统方法相比,该方法对.NET开发人员是否有用。大家可以在https://github.com/grpc/grpc-dotnet上添加使用反馈,以确保我们构建出开发人员喜欢并能发挥作用的东西。

谢谢!

原文链接:https://devblogs.microsoft.com/aspnet/grpc-web-experiment/ 原文作者:James Newton-King 翻译作者:依乐祝

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【译】gRPC vs HTTP APIs

    本文翻译自 ASP.NET Blog | gRPC vs HTTP APIs,作者 James,译者 Edison Zhou。

    Edison Zhou
  • ASP.NET Core 3.0 使用gRPC

    gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架。 gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建...

    梁规晓
  • 进行API开发选gRPC还是HTTP APIs?

    上一篇文章我带着大家体验了一把《ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)》,如果有兴趣的可以点击链接进行查看,相信跟着做的你,也是可...

    依乐祝
  • 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

    .NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新。

    Edison.Ma
  • 浏览器引入gRPC的现况

    gRPC 1.0于2016年8月发布,现已发展成为应用通信的首选技术解决方案之一。它已被全球的初创公司、企业公司和开源项目采用。它对多语言环境的支持、关注性能、...

    CNCF
  • .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版。针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的...

    Edi Wang
  • .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版。针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的...

    依乐祝
  • [翻译] ASP.NET Core 3.0 的新增功能

    全文翻译自微软官方文档英文版 What's new in ASP.NET Core 3.0

    梁规晓
  • gRPC遇见.NET SDK和Visual Studio:构建时自动生成编码

    作为微软向其跨平台.NET产品发展的一部分,他们大大简化了项目文件格式,并允许第三方代码生成器与.NET项目的紧密集成。我们一直倾听,现在很自豪地介绍从Grpc...

    CNCF

扫码关注云+社区

领取腾讯云代金券