Обработка WebSocket закрытого соединения в WCF - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть приложение, которое использует некоторую службу WCF WebSocket. Теперь, если хост закрывает соединение, я получаю следующие исключения:

  • System.Net.Sockets.SocketException
  • System.Net.WebSockets.WebSocketException
  • System.ServiceModel.CommunicationException

Теперь я хочу обработать эти исключения в своем клиентском приложении и попытаться повторно подключиться / сообщить пользователю и т. Д. Но как именно поймать эти исключения?

Может быть, подключиться к каналу неисправного события. Я попробовал это:

context = new InstanceContext(this);
var endpointAddress = new EndpointAddress(ServerFullAddress);
context.Faulted += Channel_Faulted;    
client = new ServiceName(context, "NetHttpBinding_ServiceName", endpointAddress);

Но метод ChannelFaults никогда не выполняется. Как правильно подключить это событие, чтобы этот метод выполнялся при закрытии websocket.

Моя другая идея - реализовать какой-нибудь глобальный обработчик исключений и перехватывать там эти исключения? Что ты думаешь?

1 Ответ

0 голосов
/ 04 сентября 2018

Если вы управляете службой, попробуйте отправлять Сбои вместо Исключения, это можно сделать несколькими способами:

Но я подозреваю, что причина, по которой он не попадает в событие Faults, заключается в том, что ваш ChannelFactory - это не тот, который вызвал ошибку, а скорее clientChannel,

IClientChannel channel = (IClientChannel) Factory.CreateChannel();, вы можете проверить состояние объекта канала и воссоздать его, используя описанный выше метод, обычно состояние OpenedState - это то, что вы ищете в объекте канала, закрытие, закрытие и т. Д. Будет означать либо канал не открыт или был прерван или неисправен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...