...what options are there now with .NET 4.0, in a way that does support NAT for the client side (i.e. client behind NAT).
I would prefer to use something HTTP based, but that is a weak condition - I think mid term I will have some non http communication outside WCF anyway, so proxy traversal is something I could delay.
Pre .NET 4.0 there was the issue that basically the server->client channel would be opened from the server, which made NAT something non-traversable.
Polling is not acceptable - we talk time sensitive information here.
So, what are my options now?
You can open a connection from the client and just keep it open. Or forward ports on NAT to clients, so connecting to NAT:34823 will go to 192.168.xxx.xxx:80. Or pay Microsoft some money to use their Service Bus, which is not exactly finished and with uncertain future. Or do some clever hack, install Skype on both clients and servers, send your messages trough the API.