Использование PNRP HostName для успешного размещения службы WCF?
То, что я пытаюсь сделать, это приложение p2p chat, честное и простое. Он использует одну программу в нескольких экземплярах на одном или нескольких компьютерах. Так что нет конкретного приложения "сервер / хост". Также обратите внимание, что я не использую одноранговый канал.
Итак, это мой сервисный хост внутри приложения чата:
//wcf host
WCFService srvc= new WCFService();
tcpUri = new Uri(string.Format("net.p2p://{0}:{1}/ProjectSandSevice", peerName.PeerHostName, port));
NetPeerTcpBinding tcpPeerBinding = new NetPeerTcpBinding();
tcpPeerBinding.Security.Mode = SecurityMode.None;
tcpPeerBinding.Resolver.Mode = System.ServiceModel.PeerResolvers.PeerResolverMode.Pnrp;
host = new ServiceHost(srvc);
host.AddServiceEndpoint(typeof(IWCFService), tcpPeerBinding, tcpUri);
host.Open();
PeerHostName (DNS-имя) не защищено, и это выглядит как "hatest-hna3l.p0.pnrp.net". Поэтому иногда, когда приложение чата работает на другой машине за другим NAT (маршрутизатором), оно не работает (PNRP находит его, но WCF не может подключиться). Я думаю, что это из-за повторяющегося незащищенного имени DNS. Обратите внимание, что это иногда работает, а иногда нет!
Поэтому я подумывал использовать 2 зарегистрированных одноранговых имени PNRP, одно незащищенное (для разрешения PNRP) и одно защищенное (таким образом, имеющее гораздо более уникальное имя хоста, чем "hatest-hna3l.p0.pnrp.net") для фактического размещения службы WCF.
Пожалуйста, скажите мне, что вы думаете об этом подходе, и он решит мою проблему ненадежного соединения WCF.