26

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

 4 years ago
source link: http://www.cnblogs.com/bisslot/p/12346507.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

我很高兴宣布通过.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 添加您的反馈, 以确保我们构建出开发人员喜欢并能发挥作用的东西。

谢谢!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK