Έχω υλοποιήσει κάτι παρόμοιο χρησιμοποιώντας την πρώτη λύση, μόνο που λαμβάνω τα δεδομένα ως byte[] σε chunks, και μαζί με αυτά αποστέλω και το checksum του τρέχοντος chunk (για verification κάθε chunk). Το κάθε πακέτο είναι 128KB + 32byte checksum.
Υπάρχει overhead (λόγω των πολλών κλήσεων), αλλά η λύση είναι scalable, καθώς έχω μεταφέρει με επιτυχία αρχεία της τάξης των 500MB σε 20-30 clients ταυτόχρονα, με υποστήριξη resume.
Ωστόσο, δεν έχω υλοποιήσει security μηχανισμούς (γιατί δεν ήταν απαιτούμενο). Για κάτι πιο "formal", ίσως να ήθελες να ρίξεις μια ματιά και σε αυτό (το οποίο χρησιμοποιεί WSE):
http://www.codeproject.com/soap/MTOMWebServices.asp
Μην αφήνετε τα media να σας "ταΐζουν"!