升级Grpc到2.33.1且TargetFramework为4.8时出现Grpc.Core.RpcException异常
问题排查步骤
1. 补全依赖包并统一版本
你当前的NuGet引用缺少gRPC C#的核心实现包Grpc.Core,Grpc.Core.Api仅为抽象接口层,2.33.1版本的运行时实现全部在Grpc.Core包内,先补充对应版本的引用:
<PackageReference Include="Grpc.Core" Version="2.33.1" />
同时检查所有关联项目的Grpc、Google.Protobuf包版本完全对齐,避免版本冲突。如果是从低版本.NET Framework升级到4.8,确认项目的绑定重定向配置已将Grpc相关程序集版本统一指向2.33.1对应版本,避免程序集加载异常。
2. 排查取消逻辑触发场景
本次错误返回的状态码为Cancelled(gRPC标准状态码1),日志明确显示响应是由本地[::1]:28000的服务端返回,按优先级排查以下场景:
- 客户端调用
Init接口时设置的Deadline是否过短,请求未处理完成就触发了超时自动取消 - 调用时传入的
CancellationToken是否被上层业务逻辑提前触发(比如关联的CancellationTokenSource被提前调用Cancel方法) - 服务端
Init接口实现逻辑中是否主动返回取消状态,或是服务端侧的请求处理超时阈值小于接口实际执行耗时 - 本地防火墙、端口占用类工具是否拦截了回环地址的gRPC连接,导致连接被主动断开
3. 新增链路日志定位根因
开启gRPC详细日志输出完整请求链路,客户端创建Channel时新增如下配置项:
var channelOptions = new List<ChannelOption> { new ChannelOption("GRPC_VERBOSITY", "DEBUG"), new ChannelOption("GRPC_TRACE", "all") };
同时在服务端Init接口的入口、各个关键执行节点、出口增加打点日志,确认请求是否正常进入服务端、执行到哪一步触发了取消。
内容的提问来源于stack exchange,提问作者fofo
相关产品推荐
相关产品推荐

