Когда 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 раз, избавьтесь от своего канала и создайте новый.

Другие вопросы по тегам