.Net WCF NAT 遍历的最佳实践

Posted

技术标签:

【中文标题】.Net WCF NAT 遍历的最佳实践【英文标题】:Best practices for .Net WCF NAT Traversal 【发布时间】:2011-07-18 21:24:00 【问题描述】:

我正在为 .Net 中的点对点 NAT 遍历寻找建议或解决方案。假设我有一个聊天应用程序,两个客户端需要连接,但都在 NAT 后面:

对于家庭场景,uPNP 可能没问题,因为只涉及电缆调制解调器或消费者路由器。但是,无法实现 uPNP 的企业环境呢?

我熟悉 UDP 打孔,它可以用于握手,但我宁愿不依赖它来传输真实的应用程序数据。

我也研究了 IPv6 和 Teredo,但我不相信每个客户端都会有 IPv6 可用性,而且对于所有 Teredo 要求(服务器、中继等)有点混乱

现在是 2011 年,IM/Chat 客户端已经存在了 10 年,甚至还有一些 - 所以我相信这个问题已经解决了很多次。谁能推荐这个领域的最佳实践?提前致谢!

【问题讨论】:

您可以使用外部服务器来处理 NAT-T 吗? 是的 - 两个客户端都必须使用第 3 方服务器进行身份验证,这很好。我现在正在通过一个端口上的多个套接字来研究 TCP/IP 打孔。 WCF 开箱即用地支持这一点,因此它可能是一个完美的解决方案。 brynosaurus.com/pub/net/p2pnat 第 4.2 节和 msdn.microsoft.com/en-us/library/ms734772.aspx 基本上 - 只需使用 Teredo 即可解决所有问题。 有没有关于如何使用nat遍历编写c#应用以及如何配置teredo的完整示例? 【参考方案1】:

XMPP 支持通过 NAT 穿越进行聊天,并且有几个用于 .NET 的开源客户端。使用任何 XMPP 服务器,例如 OpenFire。

【讨论】:

以上是关于.Net WCF NAT 遍历的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

什么是 WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”?

“重载”方法的 WCF 最佳实践

大型 WCF 服务的最佳实践?

调用 WCF 服务的最佳实践 [重复]

WCF 双工客户端的最佳实践

WCF ChannelFactory 和连接超时的最佳实践