无法使包装器 binance.net 工作
Unable to get the wrapper binance.net working
我已经从 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"}
然后我post一个订单
当我这样做时,上面代码中的 websocket 运行ning 什么都不输出。知道我做错了什么吗?
您的 socketClient
在订阅后立即取消订阅活动。
你需要换行
socketClient.UnsubscribeAll();
Console.ReadLine();
在读取来自控制台的行之前订阅事件。
有些事情必须完成才能获得正确的结果:
- 您必须为
BinanceSocketClient
指定选项
- 您必须等待一些事件才能取消订阅
- 在等待期间,您必须使用 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();
}
在您提供的代码中,您使用测试网 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 }
});
我已经从 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"}
然后我post一个订单
当我这样做时,上面代码中的 websocket 运行ning 什么都不输出。知道我做错了什么吗?
您的 socketClient
在订阅后立即取消订阅活动。
你需要换行
socketClient.UnsubscribeAll();
Console.ReadLine();
在读取来自控制台的行之前订阅事件。
有些事情必须完成才能获得正确的结果:
- 您必须为
BinanceSocketClient
指定选项
- 您必须等待一些事件才能取消订阅
- 在等待期间,您必须使用 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();
}
在您提供的代码中,您使用测试网 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 }
});