C# 使用websocket-client库接收消息后断开报操作取消错误如何排查
错误含义
你遇到的The operation was canceled.报错,在Marfusios websocket-client库的运行场景下,核心含义是关联WebSocket连接的异步操作被主动终止。结合报错日志中「Exception while connecting」的标注,可以确定本次报错触发于自动重连阶段,本质是上一次连接异常断开后,重连操作超时或被强制终止,才抛出了该错误。
2021-08-24 19:50:58.9833|ERROR|Websocket.Client.WebsocketClient|[WEBSOCKET CLIENT] Exception while connecting. Waiting 60 sec before next reconnection try. Error: 'The operation was canceled.'
常见的触发原因包括:底层TCP链路异常中断、服务端未按规范发送关闭帧直接切断连接、本地绑定的取消令牌被触发、连接保活失败被库主动销毁。
调试排查方向
- 首先开启库的Debug级日志,确认连接断开前最后一次交互的报文特征,排查是否存在超大报文超出默认消息大小限制、异常格式报文触发库主动断连的情况
- 检查服务端配置:确认服务端的空闲超时阈值、单连接最大消息承载限制,排查是否是服务端收到特定消息后主动切断连接,未返回标准WebSocket关闭码
- 校验本地
CancellationToken使用逻辑:排查消息处理回调中是否有未捕获的异常,导致上层触发了取消令牌的Cancel方法,强制终止了连接 - 验证网络链路规则:确认客户端到服务端之间的防火墙、负载均衡、反向代理是否配置了长连接空闲超时策略,多数七层代理默认会断开空闲超过30/60秒的长连接,你可以调小库的自动Ping间隔,保证间隔小于代理超时阈值
- 版本兼容性验证:如果近期升级过该websocket-client库版本或者.NET运行时版本,可回滚到此前正常运行的版本,确认是否是版本变更引入的兼容性问题
- 检查消息处理逻辑:排查是否存在消息同步处理阻塞时间过长的问题,当消息消费速度远低于服务端推送速度时,库内部的接收缓冲区溢出会主动触发取消操作,断开连接
内容的提问来源于stack exchange,提问作者PhoenixXKN
相关产品推荐
相关产品推荐

