Уведомление о прогрессе в WCF для длительных процессов - Как? - PullRequest
7 голосов
/ 13 января 2011

Мне нужно спроектировать и реализовать способ работы с долго выполняющимися процессами в клиент-серверном приложении.Типичный длительный процесс может / может занять 2-3 минуты.Я также должен сообщать о прогрессе пользовательскому интерфейсу и сохранять его отзывчивым.

Имея это в виду, я подумал о нескольких решениях:

  • Один асинхронный запрос для запуска процесса, который запускает процесс на стороне сервера и возвращает назначенный LRPID (Долгосрочный идентификатор процесса) , а затем периодически запрашивает у клиента этот LRPID.( Pro : простота развертывания, нет необходимости в брандмауэре Con : не легка, требует много ресурсов и т.как NetTcpBinding) и инициировать обратные вызовы с сервера по мере продвижения ( Pro : элегантный, эффективный, Con : кошмар развертывания)

  • [Ваше предложение ???]

Что бы вы выбрали по этому поводу?

Ответы [ 3 ]

4 голосов
/ 14 января 2011

Вот пост Дэна Уолина о том, как создать индикатор прогресса WCF для приложения Silverlight. Это должно помочь.

1 голос
/ 17 января 2011

Если вы не хотите беспокоиться о брандмауэре клиента и т. Д., Вероятно, я бы пошел с вашим первым решением и использовал BackGroundWorker , чтобы сделать вызов, чтобы не блокироватьПользовательский интерфейсЯ сделал это недавно для приложения, в котором запрос на создание отчета помещается в очередь и извлекается после его завершения.Вроде хорошо работает.

0 голосов
/ 07 августа 2014

Другим способом (без необходимости изменения привязки WCF) является использование элемента управления WebBrowser в клиенте WPF и SignalR для отправки сообщений о ходе выполнения с сервера на этот элемент управления.

Обратите внимание, что во избежание ошибок JavaScript, возникающих при использовании элемента управления WebBrowser (поскольку по умолчанию он использует Internet Explorer версии 7, которая, по-видимому, не совместима с jQuery.js), вам необходимо добавить ключив реестр на клиентском компьютере, чтобы изменить значение по умолчанию для клиентского приложения для использования IE10 или более поздней версии - см. http://weblog.west -wind.com / posts / 2011 / May / 21 / Web-Browser-Control-Specifying-the-ie-версия ).Это может создавать неудобства при развертывании (поскольку, по-видимому, необходимы права администратора - например, на 64-битном ПК с Windows 8.1 - для добавления ключей реестра).Кроме того, все еще кажется необходимым вызывать долго работающий метод WCF в отдельном потоке, в противном случае элемент управления WebBrowser, похоже, не обновляет свой дисплей, чтобы показать сообщения SignalR, которые он получает.(Это имеет смысл, поскольку в противном случае поток пользовательского интерфейса должен был бы ждать завершения вызова WCF.)

Но я упоминаю об этом как об альтернативном подходе с использованием более нового инструмента (SignalR):)

...