gRPC 用于 C# (.NET):库与使用示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

gRPC 用于 C# (.NET):库与示例



gRPC 是 Google 开发的高性能远程过程调用(RPC)框架,基于 HTTP/2 和 Protocol Buffers(protobuf)。在 .NET 生态系统中,gRPC 已成为微服务通信的事实标准,提供强类型、双向流传输和低延迟。本文将介绍在 C# 中使用 gRPC 的关键库,并提供服务器和客户端配置的实用示例。



gRPC 在 .NET 中的主要库



在 .NET 中使用 gRPC 需要以下 NuGet 包:



  • Grpc.AspNetCore — 将 gRPC 服务器集成到 ASP.NET Core(推荐用于托管)。
  • Grpc.Net.Client — 用于 .NET 的客户端库(包括 .NET Core、.NET 5+)。
  • Grpc.Tools — 从 .proto 文件生成代码的工具(作为 Protobuf 项添加到 .csproj)。
  • Google.Protobuf — 处理 protobuf 消息。


所有这些包均由 Microsoft 支持并积极开发。可通过 NuGet 包管理器或 dotnet CLI 安装:



dotnet add package Grpc.AspNetCoredotnet add package Grpc.Net.Clientdotnet add package Google.Protobufdotnet add package Grpc.Tools


在 C# 中创建 gRPC 服务器



让我们逐步创建一个处理订单的简单服务。



1. 定义 proto 文件

在服务器项目中(例如 GrpcServer)创建 order.proto 文件:



syntax = "proto3";

service OrderService { rpc GetOrder (OrderRequest) returns (OrderResponse); rpc SubscribeOrders (OrderRequest) returns (stream OrderResponse);}

message OrderRequest { int32 order_id = 1;}

message OrderResponse { int32 order_id = 1; string status = 2; double total = 3;}


2. 配置 .csproj 以生成代码

在 .csproj 文件中添加:



<ItemGroup>    <Protobuf Include="order.proto" GrpcServices="Server" /></ItemGroup>


3. 实现服务

创建一个继承自生成的基类的类:



public class OrderServiceImpl : OrderService.OrderServiceBase{    public override Task<OrderResponse> GetOrder(OrderRequest request, ServerCallContext context)    {        return Task.FromResult(new OrderResponse        {            OrderId = request.OrderId,            Status = "Shipped",            Total = 99.99        });    }

public override async Task SubscribeOrders(OrderRequest request, IServerStreamWriter<OrderResponse> responseStream, ServerCallContext context) { for (int i = 0; i < 5; i++) { await responseStream.WriteAsync(new OrderResponse { OrderId = request.OrderId, Status = $"Update #{i}", Total = 100 + i * 10 }); await Task.Delay(1000); } }}


4. 在 Program.cs 中注册



var builder = WebApplication.CreateBuilder(args);builder.Services.AddGrpc();

var app = builder.Build();app.MapGrpcService<OrderServiceImpl>();app.MapGet("/", () => "gRPC server is running");app.Run();


在 C# 中创建 gRPC 客户端



现在创建一个控制台应用程序客户端(GrpcClient)。



1. 准备工作

将 order.proto 复制到客户端项目,并在 .csproj 中指定:



<Protobuf Include="order.proto" GrpcServices="Client" />


2. 客户端代码



using Grpc.Net.Client;using GrpcClient;

var channel = GrpcChannel.ForAddress("https://localhost:5001");\

推荐