Кто-нибудь получил потоковый API TD Ameritrade для работы с C#? У них есть некоторая документация и JavaScript примеры здесь https://developer.tdameritrade.com/content/streaming-data. Я получил JavaScript примеров для работы на https://js.do/, но не могу получить ничего похожего на работу. NET. Это сокращенная версия того, что я пытаюсь сделать. Я не могу точно указать, что я отправляю, потому что я пытаюсь отправить сообщение для входа, которое содержит информацию об учетной записи, но я могу сказать, что скопировал и вставил точное сообщение JSON, которое работает в моих тестах JavaScript в файл Login JSON .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();