私がやろうとしているのは、公平でシンプルな p2p チャット アプリです。1 つまたは複数のコンピューター上の複数のインスタンスで 1 つのプログラムを使用します。したがって、特定の「サーバー/ホスト」アプリはありません。また、ピア チャネルを使用していないことにも注意してください。
これは、チャット アプリ内のサービス ホストです。
//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 名が繰り返されるためだと思います。これは機能する場合と機能しない場合があることに注意してください。
したがって、実際に WCF サービスをホストするために、2 つの PNRP 登録済みピア名、1 つはセキュリティで保護されていない (PNRP 解決用)、もう 1 つはセキュリティで保護されている (したがって、「hatest-hna3l.p0.pnrp.net」よりもはるかに一意のホスト名を持つ) を使用することを考えていました。
このアプローチについてどう思うか教えてください。信頼性の低い WCF 接続の問題を解決できますか。