Вот некоторые вещи, о которых я бы подумал:
WCF может быть полезен, если вы ожидаете подключения к вашему серверу нескольких разных типов клиентов. Возможно, в будущем вы захотите позволить другим людям писать клиентов, более или менее независимых от вас. С другой стороны, если это закрытая система, вы можете написать собственный код сокетов.
WCF предоставляет вам абстракцию более высокого уровня, так что, вероятно, вы сможете писать свою систему быстрее. В частности, такие вещи, как XML-кодирование и управление сессиями, на самом деле не являются частью вашей прикладной области, и поэтому вы не хотите тратить на них много времени. Но более высокая абстракция обычно сопряжена с затратами на производительность, поскольку уровень абстракции более универсален, чем любое приложение. С простыми сокетами вы можете адаптировать свою систему к вашим собственным потребностям, и это может обеспечить более высокую производительность (за счет более трудоемкой разработки и исправления ошибок).
Возможно, вы захотите отправить свои данные / команды и видео в отдельных потоках. Предположительно данные / команды должны быть отправлены через надежный транспорт, но видео может понести некоторую потерю. Или, может быть, видео должно быть отправлено с высоким QOS, тогда как данные / команды могут иметь задержку. На самом деле я никогда не использовал QOS, и поэтому я не знаю, какие здесь проблемы, но это может повлиять на ваше решение о WCF (положительно или отрицательно).
Вы можете разместить свой сервер в своем собственном процессе или в IIS. Если вы организуете его самостоятельно, вы можете делать все по-своему. Я считаю, что WCF и IIS - хорошие друзья, поэтому если вы думаете, что IIS, то WCF может сделать жизнь намного проще. Если вы выберете IIS (или любой другой установленный веб-сервер) вместо своего собственного хоста, вы сможете воспользоваться их инфраструктурой - масштабируемостью, надежностью, шифрованием и т. Д. Недостатком является то, что вы можете быть заблокированы на этом сервере, но на практике это может не быть проблемой.
В зависимости от вашей среды вы можете комбинировать различные технологии и функции. Например, у нас есть система, которая звучит примерно так же, как ваша, и мы выбрали: простые сокеты в клиенте; простые сокеты на сервере, но с возможностью размещения сервера в Apache; настраиваемая библиотека XML, которая делает именно то, что нам нужно; встроенный OpenSSL; COM в ядре системы, но с зависимостями от .NET. В частности, мы использовали SOAP в нашем первом прототипе, потому что его обмен сообщениями и RPC идеально подходили для нашего дизайна, но обнаружили, что он добавил слишком много сложности и заменил его собственным протоколом.
Если у вас есть время, я предлагаю вам создать быстрый прототип в WCF и посмотреть, что вы думаете. Надеюсь, что это сработает, но не бойтесь бросить это, если это не так. Основным принципом является обеспечение максимальной эффективности бизнеса для ваших клиентов, насколько это возможно, и это обычно означает, что вы должны тратить свои усилия в области приложений, а не на инфраструктуру. Но в то же время не игнорируйте вторичные принципы, такие как производительность, надежность, масштабируемость, обслуживание, расширяемость и т. Д.