Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Ключевое решение заключается в том, следует ли поддерживать службу 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

Ответ 2

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

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

Ответ 3

Hy,

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

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

<netTcpBinding>
   <binding name="MyCustomBinding"> 
      <security mode="None" /> 
   </binding> 
</netTcpBinding>

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