C# Обнаруживать, когда ClientWebSocket отключен (закрыт)C#

Место общения программистов C#
Ответить
Anonymous
 C# Обнаруживать, когда ClientWebSocket отключен (закрыт)

Сообщение Anonymous »

После долгих поисков я пришел к вам за помощью.

У меня есть приложение WPF, используйте класс ClientWebSocket (с использованием System.Net.WebSockets) для подключения к нему. Сервер WebSocket (NodeJS). Мое приложение запускает фоновое приложение Windows, оно подключается сначала, а затем через таймер в 1 минуту пытается повторно подключиться (если еще не подключено). Но когда я отключаю соединение (сетевое соединение), мое приложение этого не обнаруживает, поэтому каждую минуту сообщает мне, что оно подключено. Я знаю, что что-то не так в моем коде, и я не знаю, как реализовать обработчик событий, который будет информироваться, если соединение потеряно (веб-сокет закрыт).

Я обратите внимание, что когда я подключаюсь к серверу, я должен создать сеанс, затем я получаю session_id, и теперь я подключаюсь к серверу веб-сокетов.

Class1 — это библиотечный класс, который я использую класс WebSockets

Код: Выделить всё

class1
{
ClientWebSocket web_socket;
bool connected = false;
public async Task connect_socket()
{
Object result_object;
string session_id;
try
{
if (connected == false)
{
web_socket = new ClientWebSocket();
web_socket.Options.SetRequestHeader("headername", "headerValue");
await web_socket.ConnectAsync(new Uri(" ... uri....."), CancellationToken.None);

create_session();

ArraySegment byte_received = new ArraySegment(new byte[1024]);
WebSocketReceiveResult json_notify_result = await web_socket.ReceiveAsync(byte_received, CancellationToken.None);
string string_notify = Encoding.UTF8.GetString(byte_received.Array);
json_notify = JsonConvert.DeserializeObject(string_notify);

if (json_notify.TryGetValue("result", out result_object))
{
var result = JsonConvert.DeserializeObject((result_object).ToString());
if (result.TryGetValue("session_id", out session_id) && (string)session_id != null)
Debug.WriteLine("session_id = " + session_id);
}
connected = true;
}
}
catch (Exception ex)
{
throw ex;
}
return connected;
}
}
В моем классе 2 я использую класс 1

Код: Выделить всё

Class2
{
Class2()
{
InitializeComponent();
timer = new System.Threading.Timer(timer_callback, null, 0, 60000);
}
public void timer_callback()
{
if (Class1.connected == false)
{
Class1.connect_socket().Wait();
}
}
}
Буду очень благодарен за любые предложения.
Я действительно застрял в этом вопросе

Подробнее здесь: https://stackoverflow.com/questions/484 ... ted-closed
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»