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

StackOverflow https://stackoverflow.com/questions/804460

Вопрос

Мы строим систему, которая взаимодействует с внешней системой через TCP/IP, используя ИСПРАВИТЬ протокол.Я использовал WCF для связи от клиента к серверу, где у меня был контроль как над клиентом, так и над сервером, но никогда с внешней системой на основе TCP/IP.Возможно ли это с WCF?Если да, может ли сообщество предоставить мне ссылки, чтобы начать работу и двигаться в правильном направлении?

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

Выстрел вверх:Я не понимаю, почему бы и нет.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top