.NET 3.5 - асинхронный многократный вызов веб-службы из приложения WPF - PullRequest
1 голос
/ 11 февраля 2009

Исходя из моего предыдущего вопроса [текст ссылки] [1], у меня возникла новая проблема.

У меня есть приложение WPF, которое будет вызывать веб-сервис. Этот веб-сервис будет вызываться асинхронно нажатием кнопки «GO». Результаты могут занять около 30 секунд, чтобы вернуться.

Проблема в том, что я хочу, чтобы пользователи могли нажимать кнопку «GO» столько раз, сколько им хотелось бы сделать несколько запросов.

Что я не хочу, чтобы клиент открывал новое соединение с веб-сервисом при каждом нажатии кнопки. Метод веб-сервиса очень прост:

invokeExecutionRequest (int executeID)

Этот метод просто возвращает флаг, определяющий успех или неудачу запроса на выполнение.

Теперь, если возможно, я действительно не хочу ставить эти запросы в очередь на клиенте, потому что очередь уже установлена ​​на сервере. Какой самый элегантный способ добиться этого?

Ответы [ 2 ]

1 голос
/ 11 февраля 2009

Если вы используете WCF для связи с вашим веб-сервисом, тогда вы можете управлять открытием / закрытием соединения:

  1. Иметь одно универсальное соединение WCF (вероятно, глобальная переменная для области видимости окна)
  2. При каждом нажатии кнопки «Перейти» проверяйте, открыто ли соединение. Если не открыть соединение, если оно есть, то делать нечего.
  3. В какой-то логический момент (закрытие окна, выполнение действия, которое означает, что Go не будет нажат), закройте соединение.
0 голосов
/ 28 февраля 2009

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

Если бы у меня было больше времени, чтобы решить эту проблему, я думаю, что WCF был бы лучшим вариантом.

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