Клиент (настольное приложение) извлекает данные ... но я хочу, чтобы сервер (веб-приложение) передавал данные - PullRequest
6 голосов
/ 25 мая 2009

У меня есть клиент-серверное приложение, в котором сервер - это веб-приложение ASP .NET, а распределенные клиенты - это настольные приложения.

Клиенты должны получать некоторые данные с сервера - когда появляются новые данные для клиента. Прямо сейчас, способ сделать это - клиент продолжает запрашивать веб-сервис каждые x минут (скажем, 2 минуты) и продолжает проверять, есть ли новые данные для клиента.

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

Как мне поступить - учитывая архитектуру решения - веб-приложение должно передавать данные в настольные приложения (клиенты) в той же сети (ЛВС)?

Ответы [ 5 ]

7 голосов
/ 25 мая 2009

То, что вы описываете, - это «продвижение сервера», которое в наши дни часто называют «COMET». Использование этих ключевых слов в веб-поиске должно найти много полезной информации.

Наиболее распространенная техника для этого называется "висячий GET". Клиент отправляет запрос GET на определенный URL-адрес, а сервер принимает соединение, но откладывает отправку ответа, пока не получит данные для отправки. Когда клиент получает ответ, он отправляет еще один запрос GET, поэтому он готов к другому сообщению.

2 голосов
/ 25 мая 2009

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

1 голос
/ 10 января 2010

Оформить WebSync ; это решение Comet для ASP.NET/IIS, но также имеется полноценный клиент .NET, который обеспечивает интеграцию с толстыми клиентами, службами Windows и т. д. Так что, похоже, он очень хорошо отвечает всем требованиям.

1 голос
/ 25 мая 2009

Вас может заинтересовать вопрос SO . То, что вы описываете, звучит как приложение Comet - выдвижение сервера к клиенту.

0 голосов
/ 25 мая 2009

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

...