Я могу общаться, если я постоянно общаюсь. Если я оставляю на 2-3 минуты закрытое соединение WebSocket без сообщения об ошибке рукопожатия, я получаю, я не знаю, как справиться.
Может кто-нибудь, пожалуйста, помогите, как обработать исключение. Я приложил журнал аварий, и вот мой код.
нажмите на изображение, чтобы увидеть полную ошибку
public async void ConnectToServerAsync()
{
await client.ConnectAsync(new Uri("ws://api.testurl.com/ws"), CancellationToken.None);
UpdateClientState();
await Task.Factory.StartNew(async () =>
{
Refresh();
while (client.State == WebSocketState.Open)
{
WebSocketReceiveResult result;
var message = new ArraySegment<byte>(new byte[4096]);
var allBytes = new List<byte>();
do
{
result = await client.ReceiveAsync(message, CancellationToken.None);
for (int i = 0; i < result.Count; i++)
{
allBytes.Add(message.Array[i]);
}
} while (!result.EndOfMessage);
try
{
Debug.WriteLine("End of Message2 :" + result.EndOfMessage);
Debug.WriteLine("All Bytes :" + allBytes.ToString());
// Optional step to convert to a string (UTF-8 encoding).
var serialisedMessae = Encoding.UTF8.GetString(allBytes.ToArray(), 0, allBytes.Count);
var msg = JsonConvert.DeserializeObject<List<ChatModel>>(serialisedMessae);
Debug.WriteLine("Message Count :" + msg.Count);
if (Chatlist.Count != msg.Count)
{
Chatlist.Clear();
foreach (var item in msg)
{
var details = new ChatModel()
{
Message = item.Message,
MessageFrom = item.MessageFrom,
MessageTo = item.MessageTo,
RoomId = item.RoomId,
_id = item._id,
TimeStamp = item.TimeStamp.ToLocalTime()
};
Chatlist.Insert(0, details);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Invalide message format. {ex.Message}");
}
}
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
void UpdateClientState()
{
OnPropertyChanged(nameof(IsConnected));
sendMessageCommand.ChangeCanExecute();
Console.WriteLine($"Websocket state {client.State}");
}
}