C# 无法使包装程序binance.net正常工作

C# 无法使包装程序binance.net正常工作,c#,.net-core,websocket,binance,C#,.net Core,Websocket,Binance,我已经从安装了包装器 使用他们的示例代码,我的应用程序中有以下内容: 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.Aut

我已经从安装了包装器

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

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();


        }
    }
}
然后我下订单

职位


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

你的
socketClient
在订阅后立即从活动中取消订阅

你需要交换线路

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

要订阅事件,直到从控制台读取该行。

必须执行一些操作才能获得正确的结果:

  • 您必须为
    BinanceSocketClient
  • 在取消订阅之前,您必须等待一些活动
  • 等待时,您必须使用邮递员应用程序(或其他类似应用程序)和您的凭证添加新订单(或新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();
    }
    
    异步静态任务主(字符串[]args) { var client=newbinanceclient(newbinanceclientoptions { ApiCredentials=新的ApiCredentials(“密钥”、“秘密”), 基本地址=”https://testnet.binance.vision", LogVerbosity=LogVerbosity.Debug, LogWriters=新列表{Console.Out} }); var startResult=client.Spot.UserStream.StartUserStream(); 如果(!startResult.Success) 抛出新异常($“无法启动用户流:{startResult.Error}”); var socketClient=new BinanceSocketClient(new BinanceSocketClientOptions { ApiCredentials=新的ApiCredentials(“密钥”、“秘密”), 基本地址=”wss://testnet.binance.vision", LogVerbosity=LogVerbosity.Debug, LogWriters=新列表{Console.Out} }); var-stop=false; var subscriberResponse=socketClient.Spot.subscriberTouseRDataupdates( startResult.数据, 数据=> { 停止=真; WriteLine($“订单更新:{data}”); }, 数据=> { 停止=真; WriteLine($“OCO订单更新:{data.Orders}”); }, 无效的 数据=> { 停止=真; WriteLine($“余额更新:${data}”); }); 如果(订阅响应成功) { 当(!停止) { 等待任务。延迟(100); } } 等待socketClient.UnsubscribeAll(); }
    在提供的代码中,使用testnet URL创建带有选项的
    BinanceClient
    ,然后创建带有默认选项的
    BinanceSocketClient
    ,默认选项将使用
    wss://stream.binance.com:9443/
    作为基本URL

    但是如果使用测试网络,则必须使用相应的
    wss://testnet.binance.vision/
    web套接字URL;否则,您将在真实网络中订阅一个非功能listenKey,它不会通知您测试网络中发生的订单更新

    只需像这样创建
    BinanceSocketClient
    实例:

    socketClient = new BinanceSocketClient(new BinanceSocketClientOptions
    {
        BaseAddress = "wss://testnet.binance.vision",
        LogWriters = new List<TextWriter> { Console.Out }
    });
    
    socketClient=newbinancesocketclient(newbinancesocketclientoptions
    {
    基本地址=”wss://testnet.binance.vision",
    LogWriters=新列表{Console.Out}
    });
    
    交换了各行,在我发布订单时,似乎对输出没有影响。看起来只有在余额发生变化时才会更新。请参阅。是的,我使用此命令api端点“POST”更改了平衡。我可以在登录binance时看到平衡的更改,但上面的代码没有输出任何内容。我使用的是.NET 3.1。“任务”似乎直到.NET4才存在。对示例代码进行了一些调整,现在可以使用了。谢谢
    socketClient = new BinanceSocketClient(new BinanceSocketClientOptions
    {
        BaseAddress = "wss://testnet.binance.vision",
        LogWriters = new List<TextWriter> { Console.Out }
    });