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

Delphi Discussion :

Performances des webservices


Sujet :

Delphi

  1. #1
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut Performances des webservices
    Bonjour tout le monde,

    Quelle méthode d'invocation de webservices est la plus stable d'après vous?


    Je vous pose la question parce que j'utilise httprio depuis un bon moment, mais avec des tests de performance, je m'aperçois que cette méthode a ses limites.

    Je m'explique :
    - j'utilise un webservice écrit en delphi win32, implémentant une interface héritée de IInvokable. Il y a une méthode SetCompo(a, b, c : string) : integer; stdcall;
    - mon application cliente a un httprio auquel je file l'url à attaquer puis je consomme la méthode du webservice.

    Tout marche parfaitement.
    Je passe aux tests de performance.
    J'appelle 5000 fois de suite la méthode SetCompo. Ca plante au bout de 4000 en levant une erreur "SOAPHTTPException", la connexion au webservice est plantée.

    Méthode pas propre qui fonctionne : je mets un Sleep(60) (60ms.) avant l'invocation, ça passe.
    Du coup, chaque appel à la méthode mets 95ms a s'exécuter au lieu de 35ms, pas top mais ça passe

    Avez-vous une idée de la meilleure façon de procéder ??
    (faire des blocs pour réduire le nombre d'invocations, utiliser autre chose que httprio, ...?)

  2. #2
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut
    Salut,

    Le connexion est plantée ? si tu fais un try catch... pour recommencer from scratch en cas de problème ? ça fonctionne ?

    As-tu des traces côté serveur ? si oui, y a-t-il eu 3999, 4000 ou 4001 appels ?

  3. #3
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut
    [/QUOTE]
    Citation Envoyé par Whiler
    Le connexion est plantée ? si tu fais un try catch... pour recommencer from scratch en cas de problème ? ça fonctionne ?
    Oui, j'ai tenté un truc dans le genre (ça essaye jusqu'à tant que ça passe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Repeat
      Try
        mon_invocation_de_methode;
        NotCrash:= True;
      Except
       NotCrash:= False;
      end; //try
    Until NotCrash;
    Mais une fois que l'erreur est levée, elle revient souvent, comme si le serveur est arrivé au bout de ses pompes et demandait un temps de repos (alors qu'il n'en a pas eu besoin pour les 4000 invocations avant).
    D'où l'idée de laisser un temps de repos de quelques millisecondes à chaque fois.

    Citation Envoyé par Whiler
    As-tu des traces côté serveur ? si oui, y a-t-il eu 3999, 4000 ou 4001 appels ?
    Pas de traces côté serveur, tout va bien pour lui.
    J'avais noté 4309 appels au départ de l'investigation, mais ça m'a l'air d'être un peu aléatoire (suivant performances de la machine hôte, si le proc et/ou de l'interface réseau sont déjà utilisés, etc.)

  4. #4
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut
    Tu es en train de stresser ton application... le temps de latence est logique pour simuler des temps de réflexion utilisateur (qd je n'aurai plus besoin de penser que par palier de 60ms, ça le fera ) ...

    Ton application cliente.. c'est juste pour tester le serveur, ou au contraire pour tester un client ? Pourquoi 5000 appels enchaînés ? Cela me semble beaucoup pour une simulation.. mais c'est peut-être demandé par tes exigences...

  5. #5
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut
    Citation Envoyé par Whiler
    Tu es en train de stresser ton application...
    Je vois qu'on a regarder le même webcast ce midi

    Citation Envoyé par Whiler
    le temps de latence est logique pour simuler des temps de réflexion utilisateur (qd je n'aurai plus besoin de penser que par palier de 60ms, ça le fera ) ...
    Je te comprends. Je pensais cela auparavant

    Citation Envoyé par Whiler
    Ton application cliente.. c'est juste pour tester le serveur, ou au contraire pour tester un client ? Pourquoi 5000 appels enchaînés ? Cela me semble beaucoup pour une simulation.. mais c'est peut-être demandé par tes exigences...
    L'application cliente est une console qui permet de charger un projet dans le projet. Un projet doit pouvoir contenir plusieurs milliers d'éléments.

  6. #6
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut une idée...
    Ne serait-il pas possible de créer un DTO/XML qui contiendrait un ensemble de composants (peut-être pas tous... mais au moins par paquet ) ?
    Histoire d'alléger le nombre d'appels ?

  7. #7
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut
    J'y pense et je crois que je vais faire des envois par paquets de toute façon.

    J'espèrais surtout savoir en faisant ce post si des gens connaissent mieux que moi ces limites avec HTTPrio et si d'autres méthodes pouvaient être plus fiables.

    Whiler, par hasard, tu connais d'autres méthodes d'invocation de webservice?

  8. #8
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut
    Je n'ai pas joué avec les options, mais il y en a quelques unes sur le composant lui-même ( soAutoCheckAccessPointViaUDDI ?) ...

    Sinon, en Delphi, je n'ai joué qu'avec lui pour attaquer de gentils WebServices (babelfish, Xara 3D, ...) ou des serveurs maisons fait en Delphi ou Java...

  9. #9
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut
    Je n'ai pas trouvé l'option soAutoCheckAccessPointViaUDDI . :-(

    J'ai regardé pour avoir l'état d'un composant, histoire de ne patienter que si l'état n'est pas égal à "libre", j'ai juste trouvé ComponentState dans TComponent donc applicable sur THTTPRio. Mais ce n'est pas une bonne piste (l'état est toujours égal à "[]").

    Sinon, il existe une autre méthode : utiliser l'importateur WSDL de Borland mais il est moins fiable que l'utilisation du HTTPRio : dans mon cas, il perds de temps en temps les pédales, sans être trop "stressé".

  10. #10
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut


    Je n'en connais pas le contenu mais il va y avoir une session sur les Web Services... peut-être des informations qui pourraient t'intéresser... ou des questions que tu pourrais poser

    CodeRage Encore Event: 24 hours of Delphi 2007 for Win32 - Thursday March 29th

    20:00-22:00 (PDT) : Web applications : Jason Sprenger and Jim Tierny

  11. #11
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut
    lol, j'ai reçu le mail aujourd'hui

    Je n'avais pas regardé le contenu donc je n'avais pas vu qu'il y a une session sur les web services.

    Mais je n'ai pas de licence Delphi 2007... pas encore prévu d'y migrer

  12. #12
    Membre chevronné
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Par défaut
    C'est l'occasion

  13. #13
    Membre éclairé
    Avatar de adaneels
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Août 2006
    Messages : 236
    Par défaut
    argh, ce n'est pas moi qui décide de mon planning

    je mets le sujet en résolu vu que la bonne façon est de toute façon de faire des envois par paquets, même si la technologie HTTPRio était parfaite.

    Merci Whiler pour ton aide

Discussions similaires

  1. Performance des Datasets
    Par Nafanga dans le forum Bases de données
    Réponses: 6
    Dernier message: 10/10/2005, 00h49
  2. Compatibilité des WebServices
    Par diesel dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 14/09/2005, 09h46
  3. performances des virtual functions
    Par xxiemeciel dans le forum C++
    Réponses: 2
    Dernier message: 25/07/2005, 17h24
  4. Performance des vertex array
    Par Mathieu.J dans le forum OpenGL
    Réponses: 13
    Dernier message: 25/06/2004, 10h47
  5. [XMLRAD] Security des WebModules et/ou des WebServices
    Par Lux interior dans le forum XMLRAD
    Réponses: 4
    Dernier message: 18/12/2002, 17h09

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