Остановить веб-сервис в flex? - PullRequest
1 голос
/ 12 января 2010

возможно ли остановить выполнение веб-службы?

У меня есть гибкое веб-приложение, которое ищет клиентов как по полному имени, так и по идентификатору клиента. При поиске по имени иногда пользователь просто вводит фамилию, и это занимает много времени.

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

спасибо

edit: Извините, я не правильно объяснил, когда я имел в виду «веб-сервис», я имел в виду mx.rpc.soap.mxml.WebService, я хочу, чтобы он не ожидал событие результата и событие ошибки. спасибо.

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

На самом деле для этой цели существует явный метод cancel(..), хотя он немного похоронен. Использование метода отмены приведет к тому, что обработчики результатов и ошибок не будут вызываться, а также удалит курсор занятости и т. Д.

В зависимости от того, как вы выполняете поиск (т. Е. Отдельный рабочий процесс и т. Д.), Его также можно расширить, добавив в cancelSearch() метод веб-службы для уничтожения этих рабочих процессов и освобождения ресурсов сервера и т. Д.

private var _searchToken:AsyncToken;

        public function doSearch(query:String):void
        {
            _searchToken = this.searchService.doSearch(query);
        }

        protected function doSearch_resultHandler(event:ResultEvent):void
        {
            trace("doSearch result");
            trace("TODO: Do stuff with results");
            _searchToken = null;
        }

        protected function doSearch_faultHandler(event:FaultEvent):void
        {
            trace("doSearch fault: " + event.fault);
            _searchToken = null;
        }

        public function cancelSearch():void
        {
            var searchMessageId:String = _searchToken.message.messageId;

            // Cancels the last service invocation or an invokation with the
            // specified ID. Even though the network operation may still
            // continue, no result or fault event is dispatched.
            searchService.getOperation("doSearch").cancel(searchMessageId);
            _searchToken = null;
            trace("The search was cancelled, result/fault handlers not called");

            // TODO: If your web service search method is using worker processes
            // to do a search and is likely to continue processing for some time,
            // you may want to implement a 'cancel()' method on the web service
            // to stop any search threads that may be running.
        }
1 голос
/ 12 января 2010

Обновление

Вы можете использовать disconnect() для удаления любых ожидающих ответчиков запросов, но это также отключает соединение службы. Затем позвоните initialize().

/ Update

Вы не можете остановить выполнение веб-службы, поскольку это находится вне контроля приложения Flex, но вы можете ограничить обработку ответа веб-службы. Например, в приложении есть кнопка типа Cancel Search, которая устанавливает логическое значение bSearchCanceled в значение true.
Обработчик результатов проверки вызовов веб-службы bSearchCanceled; если true, просто вернитесь.

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