使用gRPC-Web从浏览器调用.NET gRPC服务

栏目: IT技术 · 发布时间: 6年前

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

我很高兴宣布通过.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  for services  之间进行转换 代理 新的实验性程序包允许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 

启动文件

 1 public void ConfigureServices(IServiceCollection services)
 2 {
 3     services.AddGrpc();
 4 }
 5 
 6 public void Configure(IApplicationBuilder app)
 7 {
 8     app.UseRouting();
 9 
10     // Add gRPC-Web middleware after routing and before endpoints
11     app.UseGrpcWeb();
12 
13     app.UseEndpoints(endpoints =>
14     {
15         endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
16     });
17 }

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

客户端gRPC-Web说明

JavaScript的GRPC的Web客户端 的指令 用于建立GRPC的Web客户端浏览器的JavaScript的SPA使用。

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

1 // Configure a channel to use gRPC-Web
2 var handler = new GrpcWebHandler(GrpcWebMode.GrpcWebText, new HttpClientHandler());
3 var channel = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
4     {
5         HttpClient = new HttpClient(handler)
6     });
7 
8 var client = Greeter.GreeterClient(channel);
9 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 添加您的反馈, 以确保我们构建出开发人员喜欢并能发挥作用的东西。

谢谢!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web全栈工程师的自我修养

Web全栈工程师的自我修养

余果 / 人民邮电出版社 / 2015-9-1 / 49.00

全栈工程师正成为 IT 行业的新秀,论是上市互联网公司还是创业公司,都对全栈工程师青睐有加。本书作者是腾讯公司高级工程师,在前端、后端和APP开发方面都有丰富的经验,在本书中分享了全栈工程师的技能要求、核心竞争力、未来发展方向、对移动端的思考。除此之外,本书还详细记录了作者从零开始、学习成长的心路历程。 本书内容全面,客观务实,适合互联网行业新人、程序员,以及期待技术转型的从业者阅读参考。一起来看看 《Web全栈工程师的自我修养》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具