使用PNRP HostName成功托管WCF服务?

时间:2012-04-15 09:50:11

标签: c# wcf service p2p pnrp

我想做的是p2p聊天应用,公平而简单。它在一台或多台计算机上的多个实例中使用一个程序。所以没有特定的“服务器/主机”应用程序。另请注意,我没有使用同行频道。

所以这是我在聊天应用程序中的服务主机:

        //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 个答案:

没有答案