title: Best practices for .Net WCF NAT Traversal
body: <p>I'm looking for suggestions or a solution for peer-to-peer NAT traversal in .Net. Say I have a chat application and two clients need to connect but both are behind NAT:</p>
  
  <p>For home scenarios, uPNP is probably ok since only a cable modem or consumer router is involved. But what about corporate environments where uPNP isn't possible? </p>
  
  <p>I'm familiar with UDP hole-punching which is OK for handshaking but I'd rather not rely on it for transmitting real application data. </p>
  
  <p>I also looked into IPv6 and Teredo but I'm not confident that every client would have IPv6 availability, and it's a bit confusing as to all the Teredo requirements (servers, relays, etc.)</p>
  
  <p>It's 2011 and IM/Chat clients have been around for a decade and then some - so I gotta believe this issue has been resolved many times over. Can anyone recommend best practices i this area? Thanks in advance!</p>