用途:在 .NET 中构建或审查后端到后端的 gRPC 服务与客户端,包括添加 protobuf 契约、流式调用、拦截器,以及在 gRPC、HTTP API 与 SignalR 之间做选型,优化性能、截止时间、取消与连接复用,并用于微服务间通信集成。
主要能力:以 .proto 文件为唯一事实来源,规划包名、csharp_namespace、服务名与版本;按交互模型选择 RPC 形态(一元、服务端流、客户端流、双向流);服务端用 AddGrpc 注册,客户端用 AddGrpcClient 或长期复用 GrpcChannel;设置截止时间并传递取消;将领域失败转换为合适的 RpcException 状态码;按需加入日志或异常拦截器、OpenTelemetry 追踪与状态码指标,以及仅针对安全幂等调用的重试策略。
使用方式:先验证架构适配性,再动代码;编写详细流式代码前加载 references/patterns.md,排查常见错误时加载 references/anti-patterns.md;最后用仓库常规构建与测试验证,并在可运行时做一次聚焦的冒烟调用。示例:builder.Services.AddGrpcClient<Greeter.GreeterClient>(options => { options.Address = new Uri("https://localhost:5001"); }); 调用时设置 deadline 与 cancellationToken。
适用场景:后端 RPC、强契约、低延迟调用或流式传输;微服务间通信。
限制:不适用于面向浏览器的公开 API(除非明确接受 gRPC-Web 限制)、SignalR 集线器设计、无 protobuf/RPC 需求的普通 ASP.NET Core 最小 API 或 REST 控制器,以及非 .NET 的 gRPC 工作(除非需要跨栈契约指导)。反模式包括每次调用新建 GrpcChannel、省略截止时间、忽略 ServerCallContext.CancellationToken、发送超大单条消息、把 gRPC 当作默认浏览器 API、在拦截器中吞掉异常、对非幂等调用无策略重试。