Когда P2P не подключается, как его "перезапустить" в клиенте
Я реализовал настройку wcf P2P в простом приложении.
Мой вопрос является результатом тестирования этого с несколькими клиентами. В девяти случаях из десяти все клиенты синхронизируются в сетке и подключаются без проблем.
Однако, в зависимости от того, какой клиент я закрою, а затем снова открою, он не будет повторно подключаться к сетке. Другие клиенты этого не видят.
Мой вопрос: как я могу закрыть и снова открыть p2p на этом клиенте, чтобы он мог попытаться подключиться снова? Я мог бы установить таймер, возможно, что каждую минуту или около того, если он не подключен, он может предположить, что есть проблема, поэтому он закроет свою конечную точку p2p или что-то еще, а затем снова откроет его, чтобы обновить все это.
Я спрашиваю об этом, поскольку, если я закрою этот клиент, а затем снова открою его, он снова подключится к сетке.
Я хочу надежные соединения. Например, вы открываете клиент, и клиент выяснит, должен ли он перезапускаться или через какое-то время не получает соединение, поэтому он пытается "сбросить" соединение и восстановить его.
Имеет ли это смысл?
1 ответ
Будет трудно определить, что вы не связаны с сеткой из-за какого-то неизвестного состояния отказа, а не просто из-за одиночества.
Свойство IOnlineStatus в одноранговом канале может сообщить вам, являетесь ли вы одним в сетке (false) или если вы подключили одноранговые узлы (true). Вы можете получить это свойство, зарегистрировавшись на событие изменения статуса следующим образом:
IOnlineStatus status = myPeerChannel.GetProperty<IOnlineStatus>();
status.Online += new EventHandler(MyOnlineEventHandler);
status.Offline += new EventHandler(MyOfflineEventHandler);
Поэтому я полагаю, что один из способов сделать это - иметь таймер, который проверяет ваш онлайн-статус, и, если вы проводите в автономном режиме более X раз, избавьтесь от своего канала и создайте новый.