Библиотека WCF - это библиотека, которая позволяет разработчикам взаимодействовать между службами WCF и не-WCF независимо от протокола.Разработчикам сервисов, использующим WCF, не нужно знать детали протокола, используемого между этими сервисами, потому что эти сложности скрыты в привязках WCF.Таким образом, разработчики сервисов должны просто правильно настроить конечные точки / привязки / поведения своих клиентов или серверов, и эти конечные точки / привязки / поведения выполняют всю работу.
Но WCF не является универсальной платформой для связи с «чем-либо».Например, NetTcpBinding использует TCP-сокеты для связи.Протокол TCP позволяет создать конвейер между обеими сторонами, но когда этот конвейер установлен, TCP не указывает и не предписывает, какой контент следует передавать через этот конвейер.Это может быть какой-то стандартизированный протокол, такой как HTTP, или собственный проприетарный протокол, изобретенный разработчиком ПО, который никогда не был опубликован.Существуют сотни, может быть, тысячи пользовательских протоколов, которые могут проходить через TCP, включая такие протоколы, как Modbus через TCP или IEC104.Эти 2 протокола, например, были специально разработаны, чтобы быть крошечными для связи со встроенными устройствами и не могут использоваться в качестве протоколов для обмена универсальными сообщениями между веб-службами.
NetTcpBinding отправляет через конвейер TCP свой собственный полностью независимый протоколразработанный MS для обеспечения эффективной связи с сервисами WCF, основанными на NetTcpBinding.Его нельзя использовать для связи с вашей пользовательской службой, используя какой-то неизвестный протокол с различными (неизвестными) сериализацией данных, синхронизацией, безопасностью, схемами обмена данными и т. Д.
Так что единственно приемлемым вариантом здесь является использование«сырые сокеты» - классы типа Socket
или TcpClient
для связи с вашей проприетарной службой.Но сначала вы должны знать, какой протокол использует ваш TCP-сервер.Может быть, это какой-то стандартизированный протокол, такой как SOAP или HTTP, или полностью независимый проприетарный протокол, который никогда не публиковался и не документировался.
И даже несмотря на то, что WCF имеет много опций расширяемости, которые позволяют разработчикам расширять библиотеку WCF, эти опции расширяемости предназначены дляиспользоваться, если вы хотите разрешить WCF взаимодействовать через другой транспортный протокол (UDP, последовательная линия, общий сетевой путь) или добавить некоторые новые функции в привязки WCF, такие как новая опция безопасности, некоторая расширенная поддержка транзакций или ведение журнала.Но расширение WCF для связи с какой-либо проприетарной службой, отличной от WCF (с использованием некоторого самодельного протокола), будет неэффективным (возможно, невозможным) и чрезмерно сложным.
Так что, если ваша служба не-WCF не использует протоколэто очень близко (практически то же самое), что и протокол NetTcpBinding, тогда WCF здесь не вариант.Используйте Socket
или TcpClient
классы.