Сервер закрыл соединение WebSocket, не завершив рукопожатие close
У меня есть парсер, который получает обновления по Websocket и обрабатывает их в асинхронном методе. Проблема заключается в том что через 3-5 минут сервер разрывает соединение:
One or more errors occurred. (One or more errors occurred. (The remote party closed the WebSocket connection without completing the close handshake.))
while (update)
try
{
responce = GetResponce().Result;
Update(responce);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
Но если убрать метод Update, ошибка не появляется и соединение работает часами:
while (update)
try
{
responce = GetResponce().Result;
Console.WriteLine(responce);
}
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
Метод Update:
private async Task Update(string responce)
{
try {
foreach (var tradingPair in TradingPairs)
if ((tradingPair.TradingPairInfo.Symbol.ToLower() + "@depth").Equals(JsonConvert.DeserializeObject<CryptoBot.Binance.JsonModels.UpdateOrderBook>(responce).stream))
{
double[,] asks = JsonConvert.DeserializeObject<CryptoBot.Binance.JsonModels.UpdateOrderBook>(responce).data.a;
double[,] bids = JsonConvert.DeserializeObject<CryptoBot.Binance.JsonModels.UpdateOrderBook>(responce).data.b;
Int64 time = JsonConvert.DeserializeObject<CryptoBot.Binance.JsonModels.UpdateOrderBook>(responce).Time;
for (int i = 0; i < asks.Length / 2; i++)
tradingPair.OrderBook.Update(asks[i, 0], asks[i, 1], TypeOrder.Asks, time);
for (int i = 0; i < bids.Length / 2; i++)
tradingPair.OrderBook.Update(bids[i, 0], bids[i, 1], TypeOrder.Bids, time);
tradingPair.OrderBook.read = true;
break;
}
}
catch (Exception) { }
}
Метод GetResponce:
private async Task<string> GetResponce()
{
StringBuilder data = new StringBuilder();
int size;
ArraySegment<byte> buf;
do
{
buf = new ArraySegment<byte>(new byte[buffer]);
size = webSocket.ReceiveAsync(buf, CancellationToken.None).Result.Count;
data.Append(Encoding.UTF8.GetString(buf.ToArray(), 0, size));
} while (size > buffer - 1);
return data.ToString();
}
Источник: Stack Overflow на русском