Эффективный шаблон для получения информации о прогрессе о методе, который занимает много времени в WCF? - PullRequest
5 голосов
/ 23 декабря 2009

Я хочу получать обновления о методе, вызываемом в WCF.

Например, я запускаю 1000 запросов и хочу узнать текущий статус.

Ответы [ 3 ]

3 голосов
/ 23 декабря 2009

Если дуплексный контракт не работает в вашей среде, вам придется прибегнуть к опросу. Ваш первоначальный метод мог вернуть идентификатор (возможно, GUID), а затем вы могли бы сделать последующие вызовы другого метода, чтобы проверить прогресс, и передать идентификатор.

Это, очевидно, потребует от вас хранения информации о прогрессе где-то (например, сеанс или база данных), что не очень хорошо.

3 голосов
/ 23 декабря 2009

Да - используйте дуплексный контракт и периодически сообщайте о ходе выполнения с помощью обратных вызовов.

2 голосов
/ 23 декабря 2009

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

Если вы запускаете 1000 запросов для одной службы, вы, вероятно, столкнетесь с удушением службы до того, как будут получены все вызовы службы.

Существует аналогичное явление на стороне клиента. WCF будет разрешать только столько одновременных вызовов одновременно. В некоторой степени это настраивается, но я был бы удивлен, если бы 1000 одновременных вызовов работали без перебоев или двух.

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

Если ваша архитектура поддерживает 1000 одновременных вызовов, тогда дуплексная привязка будет подходящей. Вы можете просто опросить для завершения.

Кроме того, вы можете создать паб / суб-сервис, который целевой сервис обновляет по мере выполнения запросов. Ваш клиент будет просто перехватывать события из службы pub / sub, когда станут доступны результаты запросов.

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