Дуплексная служба Silverlight 4 - остановка обратного вызова - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть приложение Silverlight 4, которое использует дуплекс WCF, создавая обратный вызов клиенту.У клиента есть метод, который извлекает все строки из базы данных (не совсем, но для этого примера).Каждая строка отправляется клиенту с помощью обратного вызова.Мне нужно выяснить, как прервать этот процесс после начала.Например, скажем, мне надоело видеть на экране все строки из этой таблицы.Я хочу видеть строки из другой таблицы.Как мне остановить первое действие, пока оно находится в середине?

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

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

Забавно - до использования дуплексных служб моя проблема заключалась в том, что я не мог получить данные достаточно быстро.Теперь, когда я использую дуплекс, я не могу его отключить!

1 Ответ

1 голос
/ 07 февраля 2011

Я могу придумать два способа приблизиться к этому.NB: Я тоже не тестировал, и, несомненно, есть другие.

(1) На стороне клиента или сервера прервите соединение и восстановите новое.Хак, и я могу сказать по своему опыту, что кодирование вокруг такого типа соединения «теперь видишь, что нет» - это PITA.

(2) На сервересо стороны, сначала отправляйте только определенный объем данных, а остальные сохраняйте в кэше, пока не получите от клиента уведомление о том, что вы действительно хотите увидеть следующий бит.Это будет похоже на подход, используемый многими пользовательскими интерфейсами «подкачки».Вариант этого состоит в том, чтобы ставить в очередь не данные, а звонки клиенту.Добавьте их в какую-нибудь переменную Action, поставьте их в очередь и выполните обратный вызов только после того, как клиент скажет: «Да, дайте мне следующие 50».

К сожалению, я не знаю ни одногоспособ сказать OperationContext: «Прервать все ожидающие вызовы, но сохранить канал живым».Может быть, оно есть, но я не смог его найти.Рад, что кто-то с большим знанием и опытом поправил меня.

...