Использование 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.

0 ответов

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