我想做的是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连接不可靠的问题。