跳到主要内容

.NET项目如何用gRPC?从零到跑通一个例子就够了

· 阅读需 4 分钟
作者:小烨App

分类: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的几种通信模式:

  1. 一元RPC:客户端发送单个请求,服务端返回单个响应,这种是最基本最常用的交互,完全可以媲美REST API接口调用;
  2. 服务端流式RPC:客户端发送请求,服务端返回流式响应
  3. 客户端流式RPC:客户端发送流式请求,服务端返回单个响应
  4. 双向流式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.ProtobufProtocol 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服务端​

步骤一:创建项目

  1. 启动Visual Studio,选择“创建新项目”
  2. 搜索“gRPC”,选择“ASP.NET Core gRPC 服务”

  1. 项目名称设为GrpcGreeter
  2. 选择.NET版本(推荐.NET 8.0或更高)

步骤二:查看项目结构

创建完成后,可以看到以下两个核心文件:

  • Protos/greet.proto:定义gRPC服务的接口文件,这里包含了一个请求/响应数据结构,一个接口函数SayHello;

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

步骤三:运行服务端

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

3.3 创建gRPC客户端​

步骤一:创建控制台应用

  1. 另开一个Visual Studio实例
  2. 创建“控制台应用”项目,命名GrpcGreeterClient

在客户端控制台项目中添加以下几个NuGet包,作用可以文章开头的描述;

步骤二:添加proto文件

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

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