Можно ли общаться с внешней системой через TCP / IP с помощью WCF? - PullRequest
3 голосов
/ 30 апреля 2009

Мы создаем систему, которая взаимодействует с внешней системой через TCP / IP, используя FIX Protocol . Я использовал WCF для связи от клиента к серверу, где у меня был контроль над клиентом и сервером, но никогда не было внешней системы на основе TCP / IP. Это возможно с WCF? Если да, может ли сообщество предоставить ссылки, чтобы я мог начать работу в правильном направлении?

К сожалению, у меня нет намного больше информации, чем указано выше, поскольку мы все еще на ранней стадии планирования. Мы знаем, что у нас есть внешний поставщик, чья система будет взаимодействовать с нашей системой по TCP / IP. Мы хотели бы использовать это как возможность обучения и изучения WCF.

Ответы [ 4 ]

3 голосов
/ 30 апреля 2009

возможно? Возможно, да, но это займет некоторую работу.

Для начала вам нужно написать собственный транспортный канал WCF, который обрабатывает специфику ваших протоколов на основе TCP / IP (то есть вам нужно написать весь код обработки сокетов и подключить его к модели канала WCF). Это связано с тем, что канал TCP в WCF не предназначен для такой работы, а использует относительно проприетарный и недокументированный проводной протокол.

Я не достаточно знаком с FIX, чтобы сказать, насколько он сложен, но есть некоторые ошибки, когда написание каналов WCF и документация в этой области невелики.

Вторая часть, с которой вам нужно разобраться, - это кодирование сообщений. Для WCF все сообщения являются XML. То есть, как только сообщение передается в стек WCF, оно должно выглядеть как информационный набор XML во время выполнения. FIX не использует XML (afaik), поэтому вам нужно его немного адаптировать.

Есть два способа обойти это:

  1. Простой способ. Предположим, что сервер / клиент будет использовать определенный интерфейс и формат для данных, и ваш канал выполнит всю тяжелую работу по переводу сообщений FIX в / из этого формата. Простейшим примером этого может быть использование в коде WCF простого контракта на обслуживание, в котором один метод принимает строку, а затем просто инкапсулирует строку сообщения FIX в формат XML, который удовлетворяет сериализатору контракта данных для этого контракта. Тем не менее, пользовательский код все равно будет иметь дело с декодированием формата FIX позже.

  2. Выполните всю тяжелую работу в пользовательском кодировщике сообщений WCF. Это немного сложнее, но потенциально чище и более пригодно для повторного использования (и вы можете делать более сложные вещи, такие как улучшение потоковой передачи и т. Д.).

Но главный вопрос в том, стоит ли это того. Каково ваше мнение о желании использовать WCF для этого? Использование модели программирования? Я думаю, что это важное соображение, но также имейте в виду, что абстракции, которые предоставляет WCF, имеют свою цену. В частности, некоторые аспекты WCF могут быть проблематичными, если у вас есть требования в режиме реального времени, что, как я понимаю, является распространенным явлением в той финансовой среде, которую вы рассматриваете.

Если это так, вполне может быть, что вам лучше обойтись, если пропустить WCF и придерживаться немного ближе к металлу. В любом случае вам нужно будет поработать с сокетом, так что здесь есть над чем подумать.

Надеюсь, это поможет:)

1 голос
/ 30 апреля 2009

Я не думаю, что это возможно, по крайней мере, будет нелегко установить его, потому что вы не знаете протокол связи другого конца, за исключением его TCP и принятия тегов FIX.

Почему бы вам в приложении WCF не открыть сокет TCP-соединения. Это должно сделать свое дело более простым способом.

0 голосов
/ 30 апреля 2009

Не совсем - Ms не сделали обработчик соединений TCP / IP для связи со службами, не относящимися к WCF, они предполагали, что вы создадите Web-службу для этого.

Это обсуждается здесь, на SO .

0 голосов
/ 30 апреля 2009

Я думаю так. У меня есть система, с которой я почти начал работать, которая должна была выполнять почти точно это (WCF через HTTP из Интернета) Поставщик сервера, похоже, не хочет, чтобы он об этом думал, поэтому для этого вам понадобятся соответствующие разрешения.

Вверх: я не понимаю, почему нет.

...