IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Appels asynchrones de WS


Sujet :

Services Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut Appels asynchrones de WS
    Bonjour,

    J'ai une application qui fait appelle à des WebServices JAVA. En particulier, lors du Application_OnStart de mon global.asax, j'appelle une librairie qui s'occupe d'appeler un WebService X fois (ce WS prend en entré un paramètre, je l'appel une 12aine de fois). Ce WS me retourne alors à chaque appel un graphe d'objet assez lours. les données bruts retournées par le WS peuvent atteindre plusieurs dizaine de Mo. J'utilise donc la compression (côté JAVA) pour améliorer les perfs.

    Seulement, je me retrouve tout de même avec un temps de démarrage de l'appli de 3 à 5 minutes. C'est assez long. Surtout que chaque WS est appelé l'un après l'autre. Je voudrais donc pour encore améliorer tout ça utiliser les appels asynchrones des WS. Seulement, mon PB est que le WS retourne un objet sur lequel j'effectue différents traitement. actuellement mon code est de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public List<Produit> ChargerDonnesDepuisMO()
    {
       List<Produit> produits = new List<Produit>();
     
       // Je lis depuis un fichier XML une liste de codes qui seront les paramètres d'entré de mon WS
       string[] codes = ReadCodesFromXML();
     
       foreach(string str in codes)
       {
          JavaWebService jws = new JavaWebService();
          Produit pp = jws.ObtenirProduit(str);
     
          // traitements dur pp
          ....
     
          produits.Add(pp);
       }
       return produits;
    }
    Seulement en passant en asynchrone, je ne peux plus avoir le retour de mon WS dans ma méthode ChargerDonnesDepuisMO(), le retour se faisant dans la méthode appelé lors du End_ObtenirProduit();
    Et ça me pose un problème car l'architecture actuelle de mon appli ne permet pas d'appeler autre chose que la méthode ChargerDonneesDepuisMO().
    En plus, le code que je vous montre là est extrement simplifier, en réalité je passe par tout un tas d'assemblys entre la méthode ChargerDonneesDepuisMO et l'appel au WS en lui-même.

    Bref, tout ça est un peu confu, mais ce que je voudrais c'est avoir un moyen d'utiliser des WS asynchrone tout en gardant la chaine d'appel identique, c-a-d en appelant uniquement la méthode ChargerDonneesDepuisMO() qui me retournerais une List<Produit>

  2. #2
    Membre chevronné
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Par défaut
    Bon, j'avais envie de répondre bien que je ne sois pas sûr que mon intervention soit très pertinente. Tu as l'air d'avoir beaucoup de contraintes sur ce morceau de code.
    Je me demandais simplement s'il ne serait pas plus facile dans ton cas si contraignant de créer une méthode encapsulant l'appel au web service + les traitements sur le produit retourné. Ainsi, tu pourrais appeler cette méthode de façon asynchrone (tu n'aurais à gérer la synchronisation que sur l'accès à ta liste de produits pour l'ajout). Bien sûr, se pose la question du nombre de threads ainsi créés au sein de ton application (combien de produits pour cette boucle ?).
    Pas sûr d'avoir aidé.

  3. #3
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Merci de ta réponse.

    Effectivement, beaucoup de contraintes sur ce point. J'ai un peu réfléchis depuis et plusieurs solutions se profilent :

    1- Remonter les AsyncCallBack vers la couche la plus haute (pas très beau du point de vue architecture) pour associer l'appel au WS et le traitement des résultats
    2- Faire comme tu dis, exécuter l'appel au WS dans un thread séparé via une classe encapsulant l'appel au WS (gestion des thread à surveiller, peu vite devenir gourmand)
    3- Casser l'architecture existante (orientée synchrone) pour la rendre compatible avec le mode asynchrone

Discussions similaires

  1. appel asynchrone dans le thread principal
    Par mrrenard dans le forum C#
    Réponses: 6
    Dernier message: 05/04/2007, 09h07
  2. session avec appel asynchrone
    Par netounet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 11/03/2007, 14h49
  3. [C#]théorie appel asynchrone
    Par ddoc dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/05/2006, 15h43
  4. Appel Asynchrone/Synchrone
    Par Dry dans le forum CORBA
    Réponses: 3
    Dernier message: 26/04/2005, 20h43
  5. [SOAP] API pour appels asynchrones
    Par Dar Shak dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 26/04/2005, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo