内容简介:.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.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 上 添加您的反馈, 以确保我们构建出开发人员喜欢并能发挥作用的东西。
谢谢!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【RPA干货来袭】 UiBot关于如何使用浏览器调用JS命令的说明
- 一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务
- 恶意网站可利用浏览器扩展 API,窃取浏览器数据
- 360 浏览器:中国为什么没有自主研发的浏览器内核?
- 新版 Edge 浏览器或将拥有两个不同的浏览器内核
- [浏览器安全漏洞二] hao123桔子浏览器 – 页面欺骗漏洞
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Modern PHP(中文版)
Josh Lockhart / 安道 / 中国电力出版社 / 2015-9 / 39
PHP正在重生,不过所有PHP在线教程都过时了,很难体现这一点。通过这本实用的指南,你会发现,借助面向对象、命名空间和不断增多的可重用的组件库,PHP已经成为一门功能完善的成熟语言。 本书作者Josh Lockhart是“PHP之道”的发起人,这是个受欢迎的新方案,鼓励开发者使用PHP最佳实践。Josh通过实践揭示了PHP语言的这些新特性。你会学到关于应用架构、规划、数据库、安全、测试、调试......一起来看看 《Modern PHP(中文版)》 这本书的介绍吧!