Как использовать сокет-клиент с WCF (net.tcp)?

Я разработал службу WCF, которая использует адаптер net.tcp и слушает определенный порт. Я хочу подключиться к этой службе, используя обычный .net-клиент, который использует сокеты для отправки данных в порт и прослушивания ответов.
Когда я пытаюсь отправить данные в эту службу, я получаю сообщение об ошибке: «Существующее соединение было принудительно закрыто удаленным хостом».
Тем не менее, я могу подключиться к сервису другим клиентом, который использует адрес / привязку / контракты службы WCF.
Есть ли способ, который позволяет мне общаться с сервисом WCF с помощью обычного клиента на основе сокетов?

Ключевое решение заключается в том, следует ли предоставлять услугу WCF клиенту сокета или сделать клиент сокета совместимым с сервисом WCF.

Проще всего попытаться соответствовать службе WCF, а не пытаться внедрить что-то пользовательское в WCF, что никогда не бывает легким. В нижней части раздела «Другие ресурсы» вы увидите ссылку, которая описывает проверку сообщений, которая необходима, чтобы попытаться выполнить службу WCF.

Сказав это, сокеты .NET не взаимодействуют с WCF.

Любая попытка сделать это потребует пользовательского программирования на стороне WCF.

Независимо от того, используете ли вы TcpClient или сырые сокеты в .NET для подключения к WCF и общения с ним, это не имеет значения. Любая такая интероперабельность должна обрабатываться с помощью пользовательской логики в WCF. Обратите внимание, что Net.Tcp является настраиваемым транспортным протоколом. Это не технически использует TCP так же, как TcpClient.

Например, UDP очень часто используется серверами сокетов в мире Linux. WCF не обеспечивает встроенный транспорт UDP. Тем не менее, есть образец UDP для WCF, который реализует UDP для WCF. К сожалению, этот пример не иллюстрирует связь с сервером сокетов, не связанным с WCF UPD.

У меня есть выдающийся вопрос, который довольно детализирован, где я объясняю свои усилия, чтобы получить образец кода в целом для проверки на использование UDP …

Можно ли заставить WcfTestClient работать с настраиваемыми транспортными каналами?

Никто еще не ответил на мой вопрос. Итак, если вам удастся сделать эту работу, мне очень интересно. Мое дело было вызвано желанием, чтобы служба WCF могла обращаться к серверу сокетов UDP, работающему на Linux, без необходимости загромождать мою службу кодированием, отличным от WCF. Я не хочу смешивать подходы.

Другие источники…

  • Выбор транспорта
    В этой статье говорится, что «транспорт WCF TCP оптимизирован для сценария, в котором оба конца связи используют WCF».

    http://msdn.microsoft.com/en-us/library/ms733769.aspx

  • Попытка подключения клиента, отличного от WCF, к службе WCF, использующей BasicHttpBinding.
    Разработчик заканчивает писать собственный код через WebClient (в отличие от TcpClient).

    http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c2d72c2d-c095-4ae1-b8ae-d15f32a4e0be/

  • WCF против Raw .NET Sockets
    В ответе указывается, что может потребоваться двоичная сериализация TCP + или двоичная сериализация UDP +. Как я упоминал выше, существует образец привязки UDP.

    http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/c0520111-c1ca-4ffd-a4e0-ac68e86130ee/

  • Запись пользовательских запросов в простые службы WCF
    Автор объясняет, как определить формат сообщения, которое необходимо отправить в службу, чтобы клиент TcpClient или другой не-WCF-сокеты мог отправлять информацию о записи в службу WCF. Здесь подразумевается, что вы не пытаетесь согласовать службу WCF, а скорее вынуждаете клиент сокета выполнять тяжелый подъем. Тем не менее, вы не получаете встроенных преимуществ привязок WCF, если вы этого ожидаете.

    http://blogs.msdn.com/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx

Связывание Net.TCP использует специальный формат кадрирования на уровне канала, который на самом деле не задокументирован, хотя Николас Аллен начал серию сообщений в блогах по теме в последнее время. Серия начинается здесь: http://blogs.msdn.com/drnick/archive/2009/01/19/message-framing-part-1.aspx

Если честно, Net.TCP действительно, в настоящее время, более полезен для WCF для обмена WCF. если вы хотите объединиться с настраиваемым TCP-форматом, который вам нужно обработать, вам гораздо лучше использовать или использовать собственные сокеты или создать собственный пользовательский транспортный канал WCF (который может быть не тривиальным, кстати,

Hy,

вы включили трассировку WCF? Потому что, если вы это сделаете, и вы получите следующее сообщение: «Служба не позволяет вам анонимно регистрироваться». то это (обычно) проблема с настройкой безопасности.

В этом случае отключите режим безопасности для вашей привязки:

     

Но лучше было бы работать с сертификатами.

  • Как проверить, закрыто ли соединение TcpClient?
  • Java Создание новых блоков ObjectInputStream
  • Как немедленно завершить блокировку streamа при операции ввода-вывода сокета?
  • C # Установленное соединение было прервано программным обеспечением вашей хост-машины
  • close vs shutdown socket?
  • Как работает функция accept API ()?
  • Асинхронный ввод-вывод в Java?
  • Передача изображения OpenCV на C ++ через сокет
  • Официальные причины для «Программного обеспечения прерывания соединения: ошибка записи сокета»
  • Почему писать закрытый TCP-разъем хуже, чем читать?
  • Потоковый ввод в System.Speech.Recognition.SpeechRecognitionEngine
  • Давайте будем гением компьютера.