.NET WCF - обновляет графический интерфейс клиента во время обработки сервера - PullRequest
4 голосов
/ 30 апреля 2011

Я новичок, когда дело доходит до приложения клиент / сервер. (Я только запрограммировал приложения asp.net)

Я хочу создать приложение, содержащее нескольких клиентов WinForm и сервера .NET (я думаю о WCF). Связь между клиентом и сервером должна осуществляться по http (порт 80).

Сценарий применения:

Клиент передает серверу ключевое слово, например «books».

Затем сервер запустит процесс поиска соответствия данных на основе этого ключевого слова в течение 1 с - 10 мин.

Сервер найдет список результатов (от 1 до N результатов).

Я бы хотел, чтобы клиент обновлял графический интерфейс с найденными результатами, пока сервер выполняет поиск. (Не ждите, пока сервер не будет завершен).

Мои вопросы:

Является ли WCF правильным выбором для серверной части?

Что за протокол WCF? Дуплекс, опрос, на основе MSMQ?

Любые ссылки на соответствующий пример кода, стартового комплекта и т. Д. Приветствуются:)

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

Если вы используете WCF, MSMQ будет транспортным уровнем («связывание» для использования терминологии WCF) и на самом деле не имеет отношения к тому, что вы пытаетесь сделать здесь (вы можете выбрать между NetMsmqBinding и *). 1002 * против NetTcpBinding, чтобы назвать несколько). Вы можете использовать опрос или дуплексную привязку, и любая из них будет полностью действительной, хотя реализация будет кардинально другой.

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

Использование дуплексной службы также будет правильным подходом, но может оказаться более сложным для реализации, если вы никогда не работали с WCF. С дуплексной службой в определении вашего ServiceContract вы определяете CallbackContract, который является еще одним ServiceContract, который ваша служба использует для отправки сообщений обратно клиенту. В вашем случае, я думаю, вы хотели бы, чтобы в вашем CallbackContract были две отдельные операции, одна для отчета о каждом результате, и отдельная, чтобы указать, что все результаты были получены, так что ваш клиент знает, что больше не ожидает результатов и закрывает канал. , Документация MSDN по дуплексным службам довольно полная, но с WCF определенно есть некоторая кривая обучения.

0 голосов
/ 30 апреля 2011

Так как я просто беру в него удар, я просто дам вам этот указатель, чтобы начать смотреть.

Используйте Stream в качестве типа возврата и используйте IEnumerable, выполняя возврат при каждом проходе поиска по записям. Если вы вручную сериализуете каждую запись в JSON, вы можете выгружать данные в поток.

Потенциальным примером для клиентской стороны может быть попытка использовать потоковый API Twitter (http://dev.twitter.com/pages/streaming_api)), который позволит вам протестировать клиентскую часть работы с Stream и проверки серверной части вашего подтверждения концепции до принятия на стороне сервера.

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