Для того, чтобы быть твёрдо уверенным в том, что я, как разработчик серверной части, всё контролирую, первая версия сервера была написана с помощью класса System.Net.Sockets.Socket вроде того, как это описывает статья от Microsoft. Так как сокеты работают (в-принципе, как и все другие перечисленные дальше технологии от Microsoft, кроме WCF) на Begin/End-методах, была написана небольшая обёртка, предоставившая возможность работы с event-based моделью. Это был шаг первый, клиент с сервером прекрасно работали.
Так как весьма скоро нам потребовался SSL, пришлось перейти на уровень модели OSI повыше и переписать серверную часть с использованием класса System.Net.Sockets.TcpListener, к которому и был прикручен SSL. Это были шаги два и два с половиной, клиент с сервером прекрасно работали, клиент даже не пришлось переписывать – перехват пакетов показал, что всё ОК, ничего не изменилось.
Позже захотелось полноценного HTTPS со всеми его наворотами, для чего сервер снова переписали – теперь уже с использованием класса System.Net.HttpListener. Это шаги три и три с половиной, и снова всё хорошо работает, и снова клиент не надо переделывать. Справедливости ради надо заметить, что кроме пользовательского мобильного клиента, существовал ещё и тестовый C#-клиент и куча тестов – а вот их переписывать приходилось почём зря.
Шаг четвёртый пришёл тогда, когда свою систему мы начали масштабировать во всех направлениях, а собственные обёртки стали самым узким местом проекта. Тогда я почитал про WCF и за один вечер (ну почти) переписал всё взаимодействие. Со стороны клиента (и в пересылаемых пакетах) всё осталось по-прежнему, но код серверной части сократился с полудюжины серьёзных классов до считанных строк.
У этой истории две морали.
- (очевидно) Изобретать велосипеды – это плохо. Если бы я сразу полез в гугл и не побоялся использовать новую для себя технологию, удалось бы сократить разработку сервера примерно на треть.
- (и это главное) Задача по реализации одного и того же механизма с помощью разных инструментов – наилучший способ обучения, позволяющий добиться глубочайшего понимания темы. Когда ты просто проделываешь что-то несколько раз – ты это запоминаешь. Но когда при этом ты ещё каждый раз усложняешь (изменяешь) используемые инструменты, то навык оттачивается гораздо лучше.
sergey_prokofiev
2020 год, вы всерьез про WCF???
courage_andrey Автор
Обратите внимание на начало статьи — проект писался в 2014 (как видите, слоупоком я был уже тогда :) ). Сейчас просто захотел поделиться опытом.
sergey_prokofiev
да и в 14м году WCF был скорее мертв чем жив :)
courage_andrey Автор
Я предпочитаю про жив/мёртв не спорить, потому что встречал самые удивительные примеры использования инструментов и технологий, включая MS-DOS в 2006 году. Кроме того, есть отрасли, в которых исторически сложилось отставание на 2-3 года от мировых трендов.