Почему закрытый ClientWebSocket не может быть вновь открыт без создания нового экземпляра ClientWebSocket? - PullRequest
0 голосов
/ 28 мая 2019

В настоящее время я работаю над реализацией 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 из-за того, какпрограммы, которые будут использовать эту функцию.

...