RSS

.NET Core 拥抱 gRPC

自 2018 年 11 月以来,微软 .NET 团队一直与 gRPC 团队紧密合作,共同开发 .NET Core 版 gRPC 的全新完全托管实现。

我们很高兴地宣布,**grpc-dotnet** 现已随 .NET Core 3.0 正式发布!

如何获取?

**grpc-dotnet** 包已发布到 NuGet.org,并已可用于您的项目。这些包还需要最新的 .NET Core 3.0 共享框架。您可以从 .NET Core 3.0 下载页面 下载 .NET Core 3.0 SDK,以获取开发机器和构建服务器所需的共享框架。

快速入门

由于 gRPC 现已成为 .NET 生态系统中的一等公民,gRPC 模板已作为 .NET SDK 的一部分包含在内。要开始使用,请在安装 SDK 后打开控制台窗口并运行以下命令。

dotnet new grpc -o GrpcGreeter
cd GrpcGreeter
dotnet run

要创建 gRPC 客户端并使用新创建的 gRPC Greeter 服务进行测试,您可以在此处查阅本教程的其余部分

gRPC 不是已经支持 .NET Core 了吗?

目前,.NET 版 gRPC 有两种官方实现:

  • Grpc.Core: 基于原生 gRPC Core 库的原始 gRPC C# 实现。
  • grpc-dotnet: 完全用 C# 编写、无原生依赖项且基于最新发布的 .NET Core 3.0 的新实现。

这些实现可以并行共存,各自在可用功能、集成、支持平台、成熟度和性能方面具有优势。两种实现共享相同的 RPC 调用和处理 API,从而减少了锁定,并使用户能够选择最能满足其需求的实现。

新特性

与现有基于 C-Core 的实现 (Grpc.Core) 不同,新库 (grpc-dotnet) 利用了 .NET Core 基类库 (BCL) 中现有的网络原语。下图突出了现有 **Grpc.Core** 库与新 **grpc-dotnet** 库之间的区别。

gRPC .NET Stack

在服务器端,`Grpc.AspNetCore.Server` 包集成到 ASP.NET Core 中,使开发人员能够受益于 ASP.NET Core 已经解决的日志、配置、依赖注入、身份验证、授权等常见横切关注点的生态系统。ASP.NET 生态系统中流行的库,例如 Entity Framework Core (ORM)Serilog(日志库)Identity Server 等,现在可以与 gRPC 无缝协作。

在客户端,`Grpc.Net.Client` 包基于 .NET Core 中附带的熟悉 `HttpClient` API 构建。与服务器端一样,gRPC 客户端也受益于基于 `HttpClient` 构建的包生态系统。现在可以将现有包(例如 **Polly**(弹性与故障处理库)HttpClientFactory(管理 HTTPClient 生命周期))与 gRPC 客户端配合使用。

下图列出了所有新的 .NET gRPC 包及其与现有包的关系。

grpc-dotnet packages

除了作为 **grpc-dotnet** 一部分发布的新包之外,我们还进行了改进,使这两个栈都受益。Visual Studio 2019 支持 protobuf 文件的语言语法,并在保存 protobuf 文件时自动生成 gRPC 服务器/客户端代码,而无需因设计时构建而进行完整的项目重建。

gRPC in Visual Studio 2019

反馈

我们很高兴能改善 .NET 开发人员的 gRPC 体验。欢迎试用,并通过 grpc-dotnet 问题追踪器 告知我们您遇到的功能想法或错误。