我们很高兴宣布通过.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组装应用程序
- 在IIS和Azure应用程序服务中托管ASP.NET Core gRPC应用程序。某些服务器(例如IIS和Azure应用程序服务)当前无法承载gRPC服务。在他们积极致力于这一工作的同时,gRPC-Web提供了一种有趣的替代方案,如今它可以在任何环境下运行。
- 从.NET Core以外的平台调用gRPC。某些.NET平台
HttpClient
不支持HTTP / 2。gRPC-Web可用于在这些平台上调用gRPC服务(例如Blazor WebAssembly,Xamarin)。
请注意,gRPC-Web性能低下,并且不再支持两个gRPC功能:客户端流和双向流。(仍支持流传输到服务器!)GRPC-Web服务器说明
如果您尚未在.NET中学习gRPC,则这里有一个 简单的教程,因此您可以开始使用。gRPC-Web不需要对服务进行任何更改,唯一的修改是初始配置。要使用ASP.NET Core gRPC服务启用gRPC-Web,请将链接添加到Grpc.AspNetCore.Web程序包。配置应用程序以使用gRPC-Web,添加AddGrpcWeb(...)
和UseGrpcWeb()
启动文件:Startup.cspublic void ConfigureServices(IServiceCollection services)
{
services.AddGrpc();
}
public void Configure(IApplicationBuilder app)
{
app.UseRouting();
// gRPC-Web
app.UseGrpcWeb();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<GreeterService>().EnableGrpcWeb();
});
}
从浏览器调用gRPC-Web可能需要其他配置,例如,配置应用程序以支持CORS。GRPC-Web客户端说明
该GRPC的Web JavaScript客户端具有指令 用于设置GRPC的Web客户端的JavaScript的浏览器SPA利用。使用.NET客户端调用gRPC-Web类似于常规gRPC,唯一的变化是创建通道的方式。要启用gRPC-Web,请将链接添加到Grpc.Net.Client.Web软件包。配置要使用的频道GrpcWebHandler
:// 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,请阅读我们在Blazor WebAssembly中使用gRPC-Web的同事的最酷的博客文章 。立即尝试使用带有ASP.NET Core的gRPC-Web
在NuGet上预览软件包:您可以在此处找到有关将gRPC-Web与.NET Core一起使用的文档 。注意:虽然gRPC-Web for .NET只是一个试验项目,而不是受支持的产品。