Голые сокеты это самый гибкий вариант — напишите именно то, что вам нужно! Задача довольно сложная, но вполне решаемая, особенно если сначала подумать, а потом писать код.
WCF очень неплохой вариант — всё написано за вас, но максимума производительности не получить, да и с взаимодействием с не .Net могут быть проблемы, если об этом не задумываться. Я бы посоветовал на начальном этапе использовать именно его.
Посмотрите также в сторону google protocol buffers в качестве подспорья по оптимизации сетевого обмена. Его можно использовать как с WCF, так и на голых сокетах. Снимает головняк по вопросам подготовки данных перед отправкой в канал.