有没有人让 TD Ameritrade 流媒体 API 与 C# 一起使用?他们在这里有一些文档和 JavaScript 示例https://developer.tdameritrade.com/content/streaming-data。我已经让 JavaScript 示例在https://js.do/上工作,但无法获得与在 .NET 中工作类似的东西。这是我正在尝试做的缩短版本。我无法准确包含我发送的内容,因为我正在尝试发送包含帐户信息的登录消息,但我可以说我将在我的 JavaScript 测试中工作的确切 JSON 消息复制并粘贴到文件 LoginJSON .txt 在此示例中。在此示例中,套接字将在我发送消息后立即关闭,根本没有文本响应。但是,如果我发送故意格式错误的消息,我实际上会收到说明消息格式错误的文本响应,然后断开套接字连接。他们的支持没有回应,我理解这是常态。这里有一些python示例https://www.youtube.com/channel/UCBsTB02yO0QGwtlfiv5m25Q,但我都看过了,还没有学到任何东西来帮助我让我的代码正常工作。
ClientWebSocket socket = new ClientWebSocket();
var connectAsync = socket.ConnectAsync(new Uri("wss://streamer-ws.tdameritrade.com/ws"), CancellationToken.None);
string loginRequest;
using (StreamReader re = new StreamReader("LoginJSON.txt")) {
loginRequest = re.ReadToEnd();
}
connectAsync.Wait();
Thread readThread = new Thread(
delegate(object obj)
{
while (true) {
if (socket.State == WebSocketState.Open) {
Console.Out.WriteLine("Waiting");
byte[] recBytes = new byte[1024];
var clientBuffer = new ArraySegment<byte>(recBytes);
var receiveAsync = socket.ReceiveAsync(clientBuffer, CancellationToken.None);
receiveAsync.Wait();
switch (receiveAsync.Result.MessageType) {
case WebSocketMessageType.Text:
var s = Encoding.UTF8.GetString(recBytes);
Console.Out.WriteLine(s.Trim());
break;
case WebSocketMessageType.Close:
Console.Out.WriteLine("Close message received");
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}
});
readThread.Start();
socket.SendAsync(Encoding.UTF8.GetBytes(loginRequest), WebSocketMessageType.Text, true, CancellationToken.None);
Console.ReadLine();