Как написать пользовательский транспорт на основе сокетов для WCF - PullRequest
9 голосов
/ 19 декабря 2008

У меня есть мобильная платформа, на которой я пытаюсь написать код связи.

Платформа предоставляет собственный механизм связи, основанный на стандартных функциях сокетов. По сути, API сокетов платформы выглядит точно так же, как и стандартный Windows Socket API, за исключением префикса для каждой из функций.

Я хотел бы использовать WCF, чтобы абстрагироваться от сложностей API-сокетов от моих приложений-потребителей, но мне трудно находить ресурсы, которые адекватно описывают все фрагменты, которые необходимо кодировать.

Может кто-нибудь порекомендовать хорошее начальное место или предоставить описание того, что было бы необходимо для написания собственного Socket-транспорта для WCF? В идеале я хотел бы иметь возможность использовать HttpBinding для этого транспортного механизма.

Спасибо!

1 Ответ

10 голосов
/ 19 декабря 2008

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

Я также положил краткое введение о том, как некоторые части сочетаются друг с другом, что может немного помочь.

Что-то, что я не совсем понимаю в вашем вопросе: вы упоминаете, что хотите запустить HttpBinding поверх вашего транспорта. Вы имеете в виду, что хотите использовать транспортный канал WCF http поверх своего пользовательского API, подобного сокету, вместо обычного API сокетов Windows?

Если это так, то нет, это не сработает по разным причинам. Одним из них является то, что привязки и каналы на самом деле не связаны между собой напрямую. Вместо этого определение привязки (т. Е. Какие элементы привязки включены в него) контролирует, как создается стек каналов во время выполнения для вашей службы / клиента.

Таким образом, при написании собственного транспортного канала вы создадите свой собственный класс, производный от TransportBindingElement, который вы можете использовать в настраиваемой привязке для использования собственного транспортного канала вместо одного из стандартных (например, HttpTransport). Однако обратите внимание, что транспортный канал, в любом случае, является нижней частью стека каналов (то есть под ним ничего нет), поэтому вы все равно не можете наложить HttpTransport поверх вашего пользовательского транспорта (даже если ограничения API там не было) .

Другими словами, если вы хотите говорить по HTTP, вам нужно будет вставить HTTP-компонент в реализацию своего пользовательского канала. Однако ничто не мешает вам использовать остальные стандартные / ws http-привязки по умолчанию поверх вашего собственного канала, если вы предоставляете правильные формы каналов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...