Как разместить службу WCF и TCP-сервер на одном сокете? - PullRequest
5 голосов
/ 03 апреля 2010

Сегодня я использую ServiceHost для самостоятельного размещения услуг WCF.

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

Мне нужен контроль над пространствами имен URL (чтобы я мог позволить своим клиентам отправлять потоки TCP непосредственно в мой сервис, используя несколько хороших URL, таких как example.com:port/myserver/stream?id=1 или example.com: port / myserver / stream? id = что-нибудь, и поэтому я не буду беспокоиться об идее 1 клиента на 1 сокет одновременно, я действительно хочу, чтобы мои службы WCF были на том же порту, что и мой собственный сервер, или каким он чтобы можно было позвонить на www.example.com:port/myWCF/stream?id=222 ... и я хочу, чтобы он работал на любом порту - не только 80)

Может ли какое-нибудь тело помочь мне с этим?

Сейчас я использую только WCF. И мне не нравится, как это работает. Это одна из многих причин, почему я хочу начать миграцию, чтобы очистить TCP =)

Я не могу использовать привязку net-tcp или любую другую классную привязку WS- * (сегодня я использую самую простую, чтобы мои клиенты, такие как Flash, AJAX и т. Д., Легко подключались ко мне).

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

Итак ... Есть идеи? Пожалуйста - мне нужна помощь.

Ответы [ 3 ]

1 голос
/ 12 апреля 2010

Что ж, если вы собираетесь использовать чистые сокеты, вы также можете сделать свой сервис прокси-сервером. Сделайте так, чтобы службы WCF прослушивали какой-то другой порт, а ваше приложение - на желаемом. Когда вы получаете запрос в своем приложении, вручную анализируйте заголовок и проверяйте, предназначен ли он для вашего сервиса или сервиса WCF. Если он предназначен для службы WCF, откройте TCP-соединение со службой WCF и передайте ему полученные данные, а затем просто передайте ответ WCF клиенту.

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

0 голосов
/ 11 апреля 2010

Не уверен, поможет ли это вам или нет, но попробуйте включить службу общего доступа к TCP.

0 голосов
/ 07 апреля 2010

Если ваша проблема с WCF связана с производительностью, попробуйте использовать двоичную сетевую привязку TCP, чтобы исключить сериализацию XML для повышения производительности.

Некоторые приложения с высоким трафиком, такие как игры в реальном времени, используют UDP для большей части обмена данными, так как он проходит через протокол. В TCP встроены упорядоченность и надежность, но это происходит за счет производительности, поскольку неявно задерживает пакеты на ожидание неупорядоченных пакетов, чтобы они могли передать их приложению в правильном порядке или ожидать потерянные пакеты быть обиженным. Вместо этого вы можете использовать UDP и реализовать собственную схему проверки данных, которая менее строга, чем TCP.

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

...