I had this HUGE problem with WCF service doing callback to client. I used WSDualHttpBinding and it forced me to open up the TCP port on client side. With help of someone I found out that if I use "net.tcp://" it no longer needs the port to be open on client side and only the server side!
NetTcpBinding NTB = new NetTcpBinding();
NTB.Security.Mode = System.ServiceModel.SecurityMode.None;
NTB.SendTimeout = new TimeSpan(00, 00, 14);
NTB.MaxReceivedMessageSize = 102400000;
I post the above in case anyone needs this in the future.