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

  今天给大家翻译一篇由ASP.NET首席开发工程师James Newton-King前几天发表的一篇博客,文中带来了一个实验性的产品gRPC-Web。大家可以点击文末的讨论帖进行相关反馈。我会在文章末尾给出原文链接。全部译文如下:
  
  我很高兴宣布通过.NET对gRPC-Web进行实验性支持。gRPC-Web允许从基于浏览器的应用程序(例如JavaScript SPA或Blazor WebAssembly应用程序)调用gRPC。
  
  .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(www.shentuylgw.cn IServiceCollection services)
  
  {
  
  services.AddGrpcWeb(www.wangffzc.cn );
  
  }
  
  public void Configure(www.sangyulpt.com IApplicationBuilder app)
  
  {
  
  app.UseRouting();
  
  // Add gRPC-Web middleware after routing and before endpoints
  
  app.UseGrpcWeb(www.yasenyulee.cn);
  
  app.UseEndpoints(endpoints =www.shundayLzc.cn>
  
  {
  
  endpoints.MapGrpcService<GreeterService>(www.tengyao3zc.cn).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://www.jinniuyulzc.cn 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.AspNetCore.Web –将gRPC-Web支持添加到ASP.NET Core gRPC服务。
  
  Grpc.Net.Client.Web –在.NET调用gRPC-Web端点
  
  可以在此处找到将gRPC-Web与.NET Core一起使用的文档。
  
  .NET的gRPC-Web是一个实验性项目,而不是稳定发布的产品。我们想测试一下我们实现gRPC-Web的方法是否有效,并获得反馈,与通过代理设置gRPC-Web的传统方法相比,该方法对.NET开发人员是否有用。大家可以在https://github.com/grpc/grpc-dotnet上添加使用反馈,以确保我们构建出开发人员喜欢并能发挥作用的东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值