Сначала нужно задать себе несколько вопросов:
- Является ли мой «клиент» веб-браузером или исполняемым файлом?
- Сколько клиентов будет подключаться к моему серверу?
- Как часто клиентам будут отправляться данные?
- Насколько важно, чтобы клиенты получали данные немедленно (в отличие от второй или двух задержек)?
Если вашим клиентом является веб-браузер, то ваши возможности более ограничены, обратитесь к Comet за некоторыми рекомендациями. Как кто-то еще упомянул, вот хорошее сообщение в блоге, объясняющее, как сделать Comet с ASP.NET .
Если вы не ожидаете много клиентов, то открытие соединений от клиента к серверу может быть жизнеспособным решением, посмотрите на эти страницы MSDN информацию и базовый пример:
- TcpListener
- TcpClient
Если вы ожидаете много клиентов (более 50 в зависимости от вашего серверного оборудования), то ваши варианты зависят от ответов на другие вопросы:
Если ваши клиенты получают данные часто и короткие (секунды) задержки являются приемлемыми, тогда опрос - это простое решение, вы можете скрыть реализацию от клиента, чтобы казалось, что данные выталкиваются, но на самом деле в потоке есть поток клиент, который опрашивает каждые несколько секунд.
Если ваши клиенты не получают данные очень часто, то что-то вроде Comet может быть хорошим вариантом, выполните поиск по запросу "Long Polling WCF", если вы ищете решение .NET.
Обновление:
Поскольку вы уже заявили, что вашим клиентом является Silverlight, я настоятельно рекомендую эти сообщения в блоге, в которых говорится о том, что вы ищете:
- Отправка данных с сервера с использованием сокетов ( здесь , здесь и здесь )
- Отправка данных с использованием дуплексной службы WCF ( здесь и здесь )
Дуплексная служба WCF более хороша тем, что использует заданные сообщения и ответы, поэтому нет необходимости самостоятельно анализировать текстовые или двоичные данные. Это в основном версия Comet для Silverlight.