.NET中使用gRPC需定义.proto文件、生成代码、配置服务与客户端;注意HTTP/2、TLS、跨平台兼容性;服务端用dotnet new grpc创建,启用AddGrpc()和MapGrpcService();客户端通过GrpcChannel调用,复用通道提升性能。
在.NET中使用gRPC通信,核心是定义Protocol Buffers(.proto)接口、生成客户端/服务端代码、配置gRPC服务与客户端。整个过程不复杂但容易忽略细节,比如HTTP/2支持、TLS配置或跨平台兼容性。
使用.NET 6+ SDK可快速搭建gRPC服务:
dotnet new grpc -n MyGrpcService
Protos/greet.prot
o 和 Services/GreeterService.cs,对应定义的gRPC服务和实现Program.cs 中已启用gRPC:调用 builder.Services.AddGrpc() 和 app.MapGrpcService()
所有通信契约由 .proto 文件统一描述,这是gRPC的源头:
Protos/ 目录下,例如 calculator.proto
syntax = "proto3";,并用 option csharp_namespace 指定C#命名空间dotnet-grpc 工具重新生成 C# 代码(需在项目文件中含 项)客户端不需要手动处理HTTP/2或序列化,只需引用生成的类型并创建通道:
Grpc.Net.Client 和 Google.Protobuf(若未自动引入)GrpcChannel.ForAddress("https://localhost:5001") 创建安全通道(推荐HTTPS + TLS);开发时若用HTTP,需显式配置 AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true)
channel.CreateGrpcService() 获取强类型客户端(需引用服务端生成的 .cs 文件或独立的 Contracts 类库)var response = await client.AddAsync(new AddRequest { A = 1, B = 2 });,底层自动序列化/反序列化实际使用中几个关键点常被忽视:
dotnet dev-certs https --trust 安装自签名证书,否则gRPC over HTTPS会失败RpcException,可通过 exception.Status.StatusCode 和 exception.Status.Detail 获取服务端返回的错误码和消息GrpcChannel,应复用单例通道;如需细粒度控制(如超时、压缩),可通过 ChannelOptions 配置基本上就这些。掌握 proto 定义、服务注册、通道管理这三环,就能稳定构建和消费.NET gRPC服务。