2010-01-12 5 views
1

est-il possible d'arrêter l'exécution d'un service Web?Arrêt du service Web en flexion?

J'ai une application Web flex qui recherche les clients avec le nom complet et l'id du client, lors de la recherche par nom, parfois l'usager tape simplement le nom de famille et cela prend beaucoup de temps. Étant donné que l'application est utilisée lorsque les clients attendent en ligne, j'aimerais pouvoir arrêter la recherche et utiliser à la place leur nom complet ou leur identifiant, et éviter d'attendre les résultats, puis d'effectuer une recherche manuelle dans l'utilisateur. Les resultats.

grâce

modifier: Désolé, je ne me suis pas expliquer correctement, quand je voulais dire « service web » Je voulait vraiment dire mx.rpc.soap.mxml.WebService, je veux arrêter d'attendre pour l'événement result et l'événement fault. Merci.

+0

Pourquoi faut-il tant de temps pour effectuer une recherche par nom de famille? N'est-il pas indexé? Pourquoi les clients font-ils la queue? On dirait que vous essayez de résoudre un problème qui ne devrait vraiment pas exister. –

+0

son indexé, il prend beaucoup de temps parce que les serveurs ne peuvent pas prendre la charge et a beaucoup de dossiers, les gens font la queue parce que c'est comme ça que l'organisation fonctionne, et oui, ça ne devrait pas exister, mais dès maintenant , c'est le cas, et doit être résolu. merci, j'espère que vous avez une réponse – sergiogx

Répondre

1

Mise à jour

Vous pouvez utiliser disconnect() pour enlever les répondeurs de demandes en attente, mais il se déconnecte également la connexion du service. Puis appelez initialize().

/Mise à jour

Vous ne pouvez pas arrêter le service Web d'exécuter, parce que c'est au-delà du contrôle de l'application Flex, mais vous pouvez limiter le traitement de la réponse du service Web. Par exemple sur l'application, avoir un bouton comme Cancel Search qui définit un booléen bSearchCanceled à vrai.
Le gestionnaire de résultats pour l'appel de service Web vérifie bSearchCanceled; si vrai, revenez simplement.

+0

merci cela l'a fait :) – sergiogx

2

Il existe actuellement une méthode cancel(..) explicitement à cet effet, bien qu'il soit un peu enterré. L'utilisation de la méthode cancel entraînera l'annulation de l'appel des gestionnaires de résultats et des gestionnaires d'erreurs et supprimera également le curseur occupé.

En fonction de la manière dont vous exécutez vos recherches (processus de travail séparé, etc.), il est également possible d'étendre ce par ajouté dans une méthode de service Web cancelSearch() pour tuer ces processus de travail et de libérer des ressources du serveur, etc.

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. 
     }