用途:为 .NET 应用构建 gRPC 服务,覆盖从接口定义到服务端托管、客户端调用、流式通信、认证、负载均衡和健康检查的完整流程。
主要能力:使用 Protocol Buffers 作为接口定义语言,通过 Grpc.Tools 在构建时由 protoc 生成 C# 代码;支持 ASP.NET Core gRPC 服务端实现与端点托管;支持 Grpc.Net.Client 客户端模式;覆盖一元、服务端流、客户端流、双向流四种流式模式;包含认证、负载均衡与健康检查。
使用方式:服务端项目引用 Grpc.AspNetCore,客户端引用 Google.Protobuf、Grpc.Net.Client 与 Grpc.Tools,并通过 <Protobuf Include="Protos*.proto" GrpcServices="Server|Client|Both" /> 指定生成方向;构建后生成类型出现在 obj/ 下,服务端实现生成的抽象基类,客户端使用生成的客户端类。
适用场景:需要强类型契约的跨服务通信、实时数据推送、批量上传、双向流式处理等。
限制:gRPC-Web 仅支持一元和服务端流,不支持客户端流与双向流,且需要 CORS 配置;原生 gRPC 依赖 HTTP/2 trailers,浏览器不支持。源码生成器编写、HTTP 客户端工厂与弹性管道、Native AOT 与裁剪不在本技能范围内。
关键原则:以 .proto 作为契约唯一来源;复用 GrpcChannel 而非每次调用新建;通过 DI 注册客户端;始终设置截止时间;使用 L7 负载均衡;实现 gRPC 健康检查协议。
常见陷阱:不要每次请求新建 GrpcChannel;不要省略 GrpcServices 导致生成多余代码;不要从服务抛出通用 Exception,应使用 RpcException 与合适状态码;客户端流需调用 CompleteAsync();启用 gRPC-Web 时须配合 CORS。
详细代码示例见该技能目录下的 examples.md。