Addressing of each point:
1, 2. I think that for your scenario, duplex service is redundant. As you tell yourself, a duplex service is usually convenient when both the client and the service must constantly tell each other what you are doing, getting a lot of data to / from the database does not seem to be a good example of using duplex communication. As for netTcpBindingnot allowing streaming with duplex, you can just return an array of bytes (byte[]) . 40 , , Streaming , ( , ). , : ( ), , , , Stream:
[OperationContract]
Stream RetrieveFile(long _fileId);
[OperationContract]
long SaveFile(Stream _stream);
3. netTcpBinding HTTP-, , , TCP- -, netTcpBinding , . , , , netTcpBinding ( TCP, ..), (LAN), netTcpBinding . wsDualHttpBinding ( : @) , ( PollingDuplexHttpBinding Silverlight) HTTP, .
, , WCF:
http://blog.shutupandcode.net/?p=1085
http://tomasz.janczuk.org/2010/03/comparison-of-http-polling-duplex-and.html
WCF HTTP, , 2 :
http://garfoot.com/blog/2008/06/transferring-large-files-using-wcf/
http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP
, netTcpBinding, , netTcpBinding , HTTP , . 40 . , . , , , , , , . , WCF, ;)