2010-04-03 2 views
5

Tooday Я использую ServiceHost для самостоятельного хостинга WCF.Как разместить службу WCF и TCP-сервер в одном сокете?

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

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

Может ли любой орган помочь мне с этим?

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

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

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

Итак .. Любые идеи? Пожалуйста, мне нужна помощь.

+0

Вы можете написать пользовательский транспорт в WCF. См. Этот вопрос SO - http://stackoverflow.com/questions/381142/how-to-write-a-socket-based-custom-transport-for-wcf –

+2

Я не вижу, что проблема с использованием WCF , Что он не может сделать, что вам нужно? – Aaronaught

+0

WCF Слишком медленно и bugggy для бесконечной передачи данных в режиме реального времени через TCP-сокеты. – Rella

ответ

0

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

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

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

+0

Я не могу использовать привязку net-tcp, потому что с Flash и другими вещами довольно сложно подключиться. Я отчаянно нуждаюсь в быстрой и простой в использовании протокола соединения, как тот, который я создал для использования с Sockets для реального времени, с учетом переноса данных. Моя единственная проблема с соединениями сокетов - я не могу заставить их работать в хорошей паре с WCF (в том же сокете, чтобы мой TCP-сервер был доступен, как я называю мои службы WCF - простым и доступным для чтения адресом) – Rella

+0

И я могу не ИСПОЛЬЗУЙТЕ UDP вообще, потому что мой босс так груст, и нам действительно нужно быть shure все данные пришли к клиенту – Rella

+0

Но какая разница UDP делает, чтобы быть уверенным, что данные поступают от Клиента? Да, вы могли бы с достаточной степенью уверенности утверждать, что IP-адрес правильно. Но если это общедоступный сайт, вы бы не знали, что делает клиент. –

-1

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

1

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

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

Смежные вопросы