В настоящее время я работаю над реализацией System.Net.WebSockets
, которая будет использовать сотовые сети для отправки пакетов данных об устройстве в режиме реального времени.Использование сотовой сети означает, что мое решение должно быть в состоянии повторно подключить сокет, когда сеть иногда теряет соединение.Единственный способ, которым я смог сделать это, - это создать новый экземпляр ClientWebSocket
и затем асинхронно отправить сообщение о соединении.
Это не мой точный код, но, надеюсь, он поможет понять идеюо том, что я пытаюсь сделать.
void PublisherConnect()
{
myWebSocket = new ClientWebSocket();
Task.Run(async () =>
{
if (myWebSocket.ConnectionState != WebSocketState.Open)
{
try
{
await myWebSocket.ConnectAsync(HostString);
}
catch (WebSocketException ee)
{
Debug.WriteLine(ee.Message);
}
}
}
}
internal async Task ConnectAsync(Uri uri)
{
using (var cts = new CancellationTokenSource())
{
try
{
await myWebSocket.ConnectAsync(uri, CancellationToken.None);
manualState = false;
}
catch (Exception)
{
throw;
}
}
}
Если я попытаюсь подключиться снова с тем же объектом после чистого отключения, выдается сообщение об ошибке «Веб-сокет уже запущен».Что такого в WebSockets, чего я не понимаю?
РЕДАКТИРОВАТЬ - я встраиваю это в пакет NuGet, который будет использоваться в качестве библиотеки для других приложений, поэтому мне нужно остаться на .NET 4.6 из-за того, какпрограммы, которые будут использовать эту функцию.