Когда P2P не подключается, как перезапустить его в клиенте

Я реализовал настройку wcf P2P в простом приложении.

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

Однако, в зависимости от того, какой клиент я закрою, а затем снова открою, он не будет повторно подключаться к сетке. Остальные клиенты этого не видят.

Мой вопрос в том, как я могу закрыть и снова открыть p2p на этом клиенте, чтобы он мог снова попытаться подключиться? Я бы установил таймер, который, возможно, каждую минуту или около того, если он не подключен, мог бы предположить, что есть проблема, поэтому он закроет свою конечную точку p2p или что-то еще, а затем снова откроет ее, чтобы обновить все это.

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

Мне нужны надежные соединения. Например, вы открываете клиент, и клиент выясняет, нужно ли ему перезапускаться или он не получает соединение через определенное время, поэтому он пытается «очистить» соединение и восстановить его.

Имеет ли это смысл?


person Nate    schedule 07.02.2011    source источник


Ответы (1)


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

Свойство IOnlineStatus на одноранговом канале может сказать вам, один ли вы в сетке (false), или если вы подключили одноранговые узлы (true). Вы можете получить это свойство, зарегистрировавшись на событие изменения статуса следующим образом:

IOnlineStatus status = myPeerChannel.GetProperty<IOnlineStatus>();
status.Online += new EventHandler(MyOnlineEventHandler);
status.Offline += new EventHandler(MyOfflineEventHandler);

Итак, я полагаю, что одним из способов сделать это было бы иметь таймер, который проверяет ваш онлайн-статус, и если вы находитесь в автономном режиме более X времени, избавьтесь от своего канала и создайте новый.

person RMD    schedule 07.02.2011
comment
Вот что я в итоге сделал с таймером. Кажется, он работает правильно и до сих пор имеет 100% успешное восстановление соединения. - person Nate; 08.02.2011