You need to enable JavaScript to run this app. Binance.Net封装库WebSocket订阅币安测试网用户数据流无订单推送问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Binance.Net封装库WebSocket订阅币安测试网用户数据流无订单推送问题排查

问题排查定位

1. WebSocket客户端环境配置不匹配

初始化REST客户端时已经手动指向币安测试网地址,但创建BinanceSocketClient时使用了无参构造,走的是默认主网WebSocket接入地址。
此时用测试网REST接口申请的listenKey去主网WebSocket上做身份校验,根本无法匹配对应用户的权限,自然收不到测试网的事件推送。同时因为没有给WebSocket客户端开启日志输出,所有连接失败、订阅鉴权不通过的报错完全没有打印,调试时处于盲态。
WebSocket客户端需要和REST客户端的环境配置完全对齐:

var socketClient = new BinanceSocketClient(new BinanceSocketClientOptions
{
    BaseAddress = "wss://testnet.binance.vision/ws",
    LogVerbosity = LogVerbosity.Debug,
    LogWriters = new List<TextWriter> { Console.Out }
});

2. 提交的订单未实际生效

你提供的订单请求中携带的timestamp值为1614370483356,而启动用户流时获取到的测试网服务器时间为1614371813881,两者时差超过22分钟,远高于币安接口要求的1000ms最大允许时差。
按照接口规则,这类请求会直接被服务端拦截,返回时间戳超标的错误,订单根本没有进入成交流程,自然不会触发任何用户流推送。

3. 订阅回调参数错位

对应版本的Binance.Net库中,SubscribeToUserDataUpdates的回调参数顺序为:

  • 订阅使用的listenKey
  • 订单状态更新回调(触发时机:新订单提交、订单成交、订单撤销)
  • 持仓变动回调(触发时机:成交后对应交易对的持仓数量发生变化)
  • 账户余额变动回调(触发时机:成交后账户余额发生变化)
  • listenKey过期提醒回调
    你当前的传参对应关系为:
  • 第一个回调位置传null:所有订单状态更新事件触发时,没有绑定任何执行逻辑
  • 第二个回调位置传打印data.Orders的逻辑:这部分代码只有持仓变动时才会被触发,普通的挂单提交、未成交订单的状态更新根本不会走到这里
    哪怕WebSocket连接正常、订单提交成功,你也只能在持仓发生变动时看到输出,订单状态的常规更新完全不会触发打印。
    修正后的传参逻辑需要把订单更新回调放到第一个回调位置:
socketClient.Spot.SubscribeToUserDataUpdates(
    startResult.Data,
    // 绑定到第一个回调位置:订单状态更新
    (data) => {
        Console.WriteLine($"收到订单更新:{data.Data}");
    },
    // 绑定到第二个回调位置:持仓变动
    (data) => {
        Console.WriteLine($"收到持仓变动:{data.Data.Orders}");
    },
    null,
    null
);

4. 缺失的常规运行逻辑

  • 目前的代码没有在WebSocket客户端初始化时开启内置的断线重连开关,网络波动导致连接断开后无法自动恢复订阅
  • 申请到的listenKey默认有效期为30分钟,需要定期调用client.Spot.UserStream.KeepAliveUserStream(startResult.Data)接口续期,否则listenKey到期后WebSocket会自动断开,后续不再收到任何推送

内容的提问来源于stack exchange,提问作者oshirowanen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.01 12:24:01