.NET项目如何用gRPC?从零到跑通一个例子就够了
· 阅读需 4 分钟
分类:Network 发布日期:2026/6/10
在微服务和云原生架构大行其道的今天,服务之间的通信效率成为系统性能的关键瓶颈。你是否还在为REST API的低效序列化而烦恼?是否在寻找一种既能跨语言又能保持高性能的通信方案?今天,跟随作者一起来认识gRPC,以及.NET生态如何完美支持这一现代RPC框架。
如果你对gRPC的概念有所了解,可以直接跳入第3章节;如果你对gRPC已经完全熟练掌握,那就可以完全跳过本文^=^
一、什么是gRPC?为何它如此重要?
gRPC是由Google开源的高性能远程过程调用框架,它基于HTTP/2协议,使用Protocol Buffers(protobuf)作为接口定义语言和数据序列化格式。

gRPC的几个核心优势:
- 高性能:使用protobuf二进制序列化,相比JSON体积更小、速度更快
- 多语言支持:支持C++、Java、Python、Go、C#等多种语言
- 双向流式通信:基于HTTP/2,支持客户端、服务端双向流式传输
- 强类型:通过.proto文件明确定义接口,生成强类型代码
- 自动代码生成:提高开发效率,减少手动编写样板代码
gRPC的几种通信模式:
- 一元RPC:客户端发送单个请求,服务端返回单个响应,这种是最基本最常用的交互,完全可以媲美REST API接口调用;
- 服务端流式RPC:客户端发送请求,服务端返回流式响应
- 客户端流式RPC:客户端发送流式请求,服务端返回单个响应
- 双向流式RPC:双方同时发送流式消息
二、.NET对gRPC的支持:成熟且强大
微软对gRPC的支持可以说是全力投入。从.NET Core 3.0开始,gRPC就成为.NET平台的一等公民。
官方支持情况:
| 组件 | 包名 | 用途 |
|---|---|---|
| gRPC服务端 | Microsoft.AspNetCore.App(内置) | ASP.NET Core中创建gRPC服务 |
| gRPC客户端 | Grpc.Net.Client | .NET Core调用gRPC服务 |
| 代码生成工具 | Grpc.Tools | 从.proto文件生成C#代码 |
| Protobuf支持 | Google.Protobuf | Protocol Buffers序列化支持 |
.NET gRPC的技术特点:
- 完全托管实现:基于.NET原生实现,无需依赖C++库
- 与ASP.NET Core无缝集成:共享配置、日志、依赖注入等基础设施
- 性能优异:微软官方基准测试显示,gRPC性能远超传统REST API
- 跨平台支持:Windows、Linux、macOS均可完美运行
三、实战演练:创建完整的gRPC服务与客户端
接下来跟随作者一块创建一个基本的gRPC示例,包含服务端和客户端。
3.1 环境准备
- Visual Studio 2022(需安装ASP.NET和Web开发工作负载,如下图所示)
- .NET 6.0 SDK或更高版本

3.2 创建gRPC服务端
步骤一:创建项目
- 启动Visual Studio,选择“创建新项目”
- 搜索“gRPC”,选择“ASP.NET Core gRPC 服务”

- 项目名称设为GrpcGreeter
- 选择.NET版本(推荐.NET 8.0或更高)
步骤二:查看项目结构
创建完成后,可以看到以下两个核心文件:
- Protos/greet.proto:定义gRPC服务的接口文件,这里包含了一个请求/响应数据结构,一个接口函数SayHello;

- Services/GreeterService.cs:实现gRPC服务的业务逻辑

步骤三:运行服务端
按F5运行服务,控制台会显示服务监听的地址,如https://localhost:7208。

3.3 创建gRPC客户端
步骤一:创建控制台应用
- 另开一个Visual Studio实例
- 创建“控制台应用”项目,命名GrpcGreeterClient
在客户端控制台项目中添加以下几个NuGet包,作用可以文章开头的描述;

步骤二:添加proto文件
- 在客户端项目中创建Protos文件夹,把服务端的greet.proto文件复制到该文件夹
- 修改greet.proto中的命名空间,修改是为了方便区分,不修改也不影响使用;

编辑.csproj文件,将proto文件加入项目编译流程: