当前位置:首页 > Web开发 > 正文

以确保我们构建出开发人员喜欢并能发挥作用的东西

2024-03-31 Web开发

技术图片

今天给大家翻译一篇由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(IServiceCollection services) { services.AddGrpcWeb(); } 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.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上添加使用反馈,以确保我们构建出开发人员喜欢并能阐扬感化的对象。

感谢!

原文链接:https://devblogs.microsoft.com/aspnet/grpc-web-experiment/

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30108.html