3

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

4

0 回答 0