【问题标题】:Unable to get the wrapper binance.net working无法让包装器 binance.net 工作
【发布时间】:2021-05-29 05:41:27
【问题描述】:

我已经从https://github.com/JKorf/Binance.Net安装了包装器

使用他们的示例代码,我的应用中有以下内容:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Binance.Net;
using Binance.Net.Enums;
using Binance.Net.Objects;
using Binance.Net.Objects.Spot;
using CryptoExchange.Net.Authentication;
using CryptoExchange.Net.Logging;

namespace binance_stream_user_data_updates
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new BinanceClient(new BinanceClientOptions{
                ApiCredentials = new ApiCredentials("key","secret"),
                BaseAddress = "https://testnet.binance.vision",
                LogVerbosity = LogVerbosity.Debug,
                LogWriters = new List<TextWriter> { Console.Out }
            });

            var startResult = client.Spot.UserStream.StartUserStream();

            if(!startResult.Success)
                throw new Exception($"Failed to start user stream: {startResult.Error}");

            var socketClient = new BinanceSocketClient();

            socketClient.Spot.SubscribeToUserDataUpdates(startResult.Data,
            null,
            data => {
                Console.WriteLine(data.Orders);
                },
            null,
            null);

            Console.ReadLine();

            socketClient.UnsubscribeAll();


        }
    }
}

然后我运行上面的应用程序,它似乎连接并开始等待,如下所示:

dotnet run
2021/02/26 20:36:51:863 | Binance    | Debug | Client configuration: LogVerbosity: Debug, Writers: 1, Credentials: Set, BaseAddress: https://testnet.binance.vision/, Proxy: -, RateLimiters: 0, RateLimitBehaviour: Wait, RequestTimeout: 00:00:30
2021/02/26 20:36:51:903 | Binance    | Debug | [1] Creating request for https://testnet.binance.vision/api/v3/time
2021/02/26 20:36:51:911 | Binance    | Debug | [1] Sending GET request to https://testnet.binance.vision/api/v3/time 
2021/02/26 20:36:53:242 | Binance    | Debug | [1] Response received in 1320ms: {"serverTime":1614371813101}
2021/02/26 20:36:53:345 | Binance    | Debug | [2] Creating request for https://testnet.binance.vision/api/v3/time
2021/02/26 20:36:53:346 | Binance    | Debug | [2] Sending GET request to https://testnet.binance.vision/api/v3/time 
2021/02/26 20:36:54:028 | Binance    | Debug | [2] Response received in 681ms: {"serverTime":1614371813881}
2021/02/26 20:36:54:029 | Binance    | Info | Time offset set to 535.073ms
2021/02/26 20:36:54:031 | Binance    | Debug | [3] Creating request for https://testnet.binance.vision/api/v1/userDataStream
2021/02/26 20:36:54:037 | Binance    | Debug | [3] Sending POST request to https://testnet.binance.vision/api/v1/userDataStream with request body 
2021/02/26 20:36:54:732 | Binance    | Debug | [3] Response received in 694ms: {"listenKey":"key"}

然后我发布订单

发布https://testnet.binance.vision/api/v3/order?symbol=BNBUSDT&side=SELL&type=MARKET&quantity=0.1&newClientOrderId=my_order_id_201&newOrderRespType=FULL&timestamp=1614370483356&signature=58cfd86cffc626703eac32f14bf0fa2e9af4850fb33974a03d1eee3f666df15f

当我这样做时,从上述代码运行的 websocket 什么也不输出。知道我做错了什么吗?

【问题讨论】:

    标签: c# .net-core websocket binance


    【解决方案1】:

    有些事情必须做才能得到正确的结果:

    1. 您必须为BinanceSocketClient 指定选项
    2. 您必须等待某个事件才能取消订阅
    3. 在等待期间,您必须使用带有凭据的 Postman 应用程序(或其他类似应用程序)添加新订单(或新 OCO 订单)。 (这不在下面的代码中)

    请看下面的代码:

    async static Task Main(string[] args)
    {
        var client = new BinanceClient(new BinanceClientOptions
        {
            ApiCredentials = new ApiCredentials("key", "secret"),
            BaseAddress = "https://testnet.binance.vision",
            LogVerbosity = LogVerbosity.Debug,
            LogWriters = new List<TextWriter> { Console.Out }
        });
    
        var startResult = client.Spot.UserStream.StartUserStream();
    
        if (!startResult.Success)
            throw new Exception($"Failed to start user stream: {startResult.Error}");
    
        var socketClient = new BinanceSocketClient(new BinanceSocketClientOptions
        {
            ApiCredentials = new ApiCredentials("key", "secret"),
            BaseAddress = "wss://testnet.binance.vision",
            LogVerbosity = LogVerbosity.Debug,
            LogWriters = new List<TextWriter> { Console.Out }
        });
    
        var stop = false;
        var subscribeResponse = socketClient.Spot.SubscribeToUserDataUpdates(
            startResult.Data,
            data =>
            {
                stop = true;
                Console.WriteLine($"Order updated: {data}");
            },
            data =>
            {
                stop = true;
                Console.WriteLine($"OCO Orders updated: {data.Orders}");
            },
            null,
            data =>
            {
                stop = true;
                Console.WriteLine($"Balance updated: ${data}");
            });
        
        if (subscribeResponse.Success)
        {
            while (!stop)
            {
                await Task.Delay(100);
            }
        }
    
        await socketClient.UnsubscribeAll();
    }
    

    【讨论】:

    • 我使用的是 .NET 3.1。在 .NET 4 之前似乎“任务”不存在。对您的示例代码进行了一些调整,它现在正在工作。谢谢!
    【解决方案2】:

    您的socketClient 在订阅后立即取消订阅。

    你需要换行

    socketClient.UnsubscribeAll();
    Console.ReadLine();
    

    订阅事件直到控制台中的行被读取。

    【讨论】:

    • 换了行,当我发布订单时,它似乎对输出没有影响。
    • 似乎只有在余额更改时才会更新。见here
    • 是的,我使用这个命令 api endpoint "POST testnet.binance.vision/api/v3/…" 更改余额我在登录binance时可以看到余额更改,但上面的代码没有输出任何内容。
    【解决方案3】:

    在您提供的代码中,您使用测试网 URL 创建一个带有选项的 BinanceClient,然后创建一个带有默认选项的 BinanceSocketClient,该选项将使用 wss://stream.binance.com:9443/ 作为基本 URL。

    但是如果你使用测试网络,那么你必须使用对应的wss://testnet.binance.vision/ web socket URL;否则,你在真实网络中订阅了一个没有功能的listenKey,它不会通知你测试网络中发生的订单更新。

    只需像这样创建BinanceSocketClient 实例:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      相关资源
      最近更新 更多