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

Flex Discussion :

Amfphp remoteObject : gestion des erreurs


Sujet :

Flex

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut Amfphp remoteObject : gestion des erreurs
    Bonjour à tous,

    bon alors voila mon problème,
    je suis sous Flex 3, j'utilise le framework AMfPhP pour me connecter à ma base de données MySQL, ca marche niquel. J'utilise tout ca via les RemoteObject.
    Par contre dans l'objet RemoteObject, il y a un paramètre result (en cas de succès de l'action) et un paramètre fault en cas d'echec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <mx:RemoteObject id="myFonction" fault="faultHandler(event)" showBusyCursor="true" 
    			source="vo.MyFonction" destination="amfphp">
            <mx:method name="updateRecord" result="{refreshDomaine(event)}" fault="faultHandler(event)"/>
            <mx:method name="addRecord" result="{refreshDomaine(event)}" fault="faultHandler(event)"/>
            <mx:method name="delRecord" result="{refreshDomaine(event)}" fault="faultHandler(event)"/>
    </mx:RemoteObject>
    Le seul problème c'est que je n'arrive pas à distinguer les erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    "Erreur : \n" + "code:\n" + e.fault.faultCode + 
    					"\n\nMessage:\n" + e.fault.faultString + 
    					"\n\nDetail:\n" + e.fault.faultDetail
    renvoit toujours la même erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    e.fault.faultCode: "Client.Error.DeliveryInDoubt" 
    e.fault.faultDetail : "Channel disconnected before an acknowledgement was received"
    e.fault.faultString : "Channel disconnected"
    J'ai regardé du coté du php mais j'y connais rien du tout en Php donc j'avance pas ...

    Si quelqu'un peut me donner une piste ou m'éclairer

    merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Salut,
    en fait ce genre d'erreur est assez contraignant car il signifie qu'il y a une erreur dans la chaine client->server->client, et il est difficile de vraiment savoir ou cela se trouve.
    En fait :
    - Soit le problème vient de la configuration (dans le cas présent, dans ton index.php, as-tu les bons noms de services / vo etc ?), un path ou un nom de fichier mauvais, le nom du service par exemple...
    - Soit le problème vient des types de données sérialisés -> les vo Flex et Php ne correspondent pas.
    - Soit tu as un erreur dans le Php (au niveau du sql si tu l'as écrit en dur par exemple).

    Le mieux est de tester chaque partie du code responsable :
    - Les données envoyées au service,
    - le service en lui-même
    - La requête SQL
    - les données traitées avec la requête
    - les données retournées par le service.

    Utilises-tu Zend par hasard ? il y a un debugger Php normalement avec si tu l'as installé, très pratique dans un cas comme celui-ci car le debug garde la main côté server... donc tu sais directement d'où vient ton problème.

    [EDIT] : et je te conseille de pointer les resultHandler sur des fonctions distinctes les unes des autres -> le add peut marcher, et le delete peut planter, tu auras plus de facilité à traiter les résultats / erreurs dans des fonctions result différents.
    N'oubliez pas avant de poster :

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    Salut et merci de répondre aussi vite (c'est hallucinant),
    pour répondre à ta question, non je n'utilise pas Zend ,

    Le mieux est de tester chaque partie du code responsable :
    - Les données envoyées au service,
    - le service en lui-même
    - La requête SQL
    - les données traitées avec la requête
    - les données retournées par le service.
    par contre le fond de mon problème est de distinguer le type d'erreur,
    en l'occurrence je suis sur qu'il s'agit d'une requête sql "rejetée" par mysql
    car duplication de clé primaire mais dans mon code flex je ne vois pas comment traiter cette distinction ou alors avant la création de données, il faut que je vérifie qu'elle n'existe pas dans la base ...,
    je sais pas si j'ai été beaucoup plus clair que la première fois ...

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Au temps pour moi
    Utilises-tu des try / catch dans ton php ?
    Je pense que c'est la seule solution pour retourner une erreur "voulue".
    Sinon si l'erreur n'est pas catchée et traitée, tu récupères une erreur comme celle que tu as.
    N'oubliez pas avant de poster :

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    Utilises-tu des try / catch dans ton php ?
    salut, j'ai essayé mais en fait je sais pas faire ...
    et je trouve pas d'exemple sur le net parcequ'une fois que j'ai "catché" l'erreur, je sais pas quoi en faire ...

    voila ma fonction somme toute assez basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function addRecord($strSQL)
    	  {
    	  	// on se connecte
    	      $link = @mysql_connect("localhost","login", "motDePassse") or die ("Impossible de se connecter : " . mysql_error());
    	      mysql_select_db("mabase_db",$link); 
     
    	      // on envoie la requête
    	      $req = @mysql_query($strSQL) or die('Erreur SQL !'.$strSQL.''.mysql_error());
    		}
    j'ai essayé de catché si $req = FALSE mais je sais pas trop quoi faire de l'erreur récupérée ....

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Si tu as catché l'erreur, tu as fait le plus dur

    tu dois pouvoir mettre ce que tu veux dans le catch. Est-ce que tu arrives à récupérer le message d'erreur de la requête sql ?
    En théorie, dans le catch tu as juste à retourner ce message qui sera récupéré dans ton resultHandler.


    Je pense même que si tu retournes l'exception en elle-même ca devrait passer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    try
    {
    <div style="margin-left:40px">// code php + requete sql</div>}
    catch (Exception $e)
    {
    <div style="margin-left:40px">return $e;</div>}
    Et ensuite dans ton resultHandler, c'est la propriété "message" de l'event qui te renvoie ce que tu souhaites

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private function resultHandler(evt:FaultEvent):void
    {
    <div style="margin-left:40px">Alert.show(evt.message.toString());</div>}
    N'oubliez pas avant de poster :

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    avec un truc du style suivant, est-ce que je suis loin ?

    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
    20
    21
    22
    23
    function seConnecte($strSQL)
    	  {
           // on se connecte
           $link = @mysql_connect("localhost","login", "MotDePasse") or die ("Impossible de se connecter : " . mysql_error());
           mysql_select_db("mabase_db",$link);
            // on envoie la requête
            $req = @mysql_query($strSQL) or die('Erreur SQL !'.$strSQL.''.mysql_error());
     
            if ($req == FALSE){
                throw new Exception('Enregistrement deja existant');
            }
     
        }
     
    	function addRecord($strSQL){
           try{
                addRecord($strSQL);
            }
            catch (Exception $e){
                return $e; 
            }
     
        }
    Parceque ca me retourne pareil ...

  8. #8
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Ca peut passer à priori, quoique c'est pas sûr : si ta requête plante, tu risques de ne pas aller (à vérifier) jusqu'à la ligne
    Mais j'aurais fait plus simple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function myService($strSQL){
    <div style="margin-left:40px">try{
    <div style="margin-left:40px">// on se connecte
    $link = @mysql_connect("localhost","login", "MotDePasse") or die ("Impossible de se connecter : " . mysql_error());
    mysql_select_db("mabase_db",$link);
    // on envoie la requête
    $req = @mysql_query($strSQL) or die('Erreur SQL !'.$strSQL.''.mysql_error());
    }</div>return $req;  
    catch (Exception $e)
    {
    <div style="margin-left:40px">return $e;</div>}</div>
    N'oubliez pas avant de poster :

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    ma requête est bonne, elle passe pour les enregistrements qui ne sont pas des doublons ...
    je veux juste gérer le cas des doublons interdits pas les clés primaires ...
    ma solution ne fonctionne pas ,

    la tienne, j'arrive pas à la faire fonctionner non plus
    (mx.messaging.messages::ErrorMessage)#0
    body = (Object)#1
    clientId = (null)
    correlationId = "4B8B8604-F143-4CEC-1502-1BE65B1F3F0C"
    destination = ""
    extendedData = (null)
    faultCode = "Client.Error.DeliveryInDoubt"
    faultDetail = "Channel disconnected before an acknowledgement was received"
    faultString = "Channel disconnected"
    headers = (Object)#2
    messageId = "D8632DC7-4F0E-B61B-8521-1BE65B7D1BAE"
    rootCause = (null)
    timestamp = 0
    timeToLive = 0

  10. #10
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Essaye comme ça peut être : (je t'avoue que je ne comprend pas pourquoi ca ne passe pas chez toi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function myService($strSQL){
        try{
     <div style="margin-left:40px">// on se connecte 
    $link = @mysql_connect("localhost","login", "MotDePasse") or die ("Impossible de se connecter : " . mysql_error());
     mysql_select_db("mabase_db",$link); 
    // on envoie la requête 
    $req = @mysql_query($strSQL) or die('Erreur SQL !'.$strSQL.''.mysql_error());
    if (!$req)<div style="margin-left:40px">throw new Exception('Enregistrement deja existant');</div>}</div>    return $req; catch (Exception $e) {
            return $e;
        }
    N'oubliez pas avant de poster :

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    Merci beaucoup de m'aider et de prendre le temps,
    malheureusement le deuxième solution ne fonctionne pas mieux côté flex
    ca passe chez toi ? (si oui alors c'est un problème de conf je pense ),

    par contre dans le browser, on voit apparaitre
    faultString:'Invalid AMF message' faultDetail:'Erreur SQL !INSERT INTO Domaine (Libelle) VALUES ('ADM')Duplicate entry 'ADM' for key 'PRIMARY''"
    mais je me demande pourquoi dans flex,
    lorsque je fais e.fault.faultDetail, je n 'ai pas ce message la ...

    comme je connais pas beaucoup amfphp, je rajoute pour info que ma classe php est dans vo (alors que je ne fais pas de mapping), je sais pas si c'est ca qui peut être particulier ...

  12. #12
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    La je t'avoues que je sèche ....
    je suis désolé de ne pas pouvoir t'aider plus.

    Essaye peut être d'appeler ton service à partir d'une interface Php, pour être sûr que côté php tout fonctionne ... (enfin que le message d'erreur est bien envoyé).

    Lorsque que tu dis que tu as message d'erreur de ce type, c'est lorsque tu essaies d'accéder à ta page via un browser ?
    N'oubliez pas avant de poster :

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    c'est lorsque tu essaies d'accéder à ta page via un browser ?
    oui,
    bon je sèche aussi, tant pis

  14. #14
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Et si tu essayes d'enlever le "die" ?
    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
    function myService($strSQL){
        try{
     
    <div style="margin-left:40px"> // on se connecte 
    $link = @mysql_connect("localhost","login", "MotDePasse") or die ("Impossible de se connecter : " . mysql_error());
    mysql_select_db("mabase_db",$link); 
    // on envoie la requête 
    $req = @mysql_query($strSQL);
    if (!$req)</div>
            throw new Exception('Enregistrement deja existant');
     
        }
     
        return $req; catch (Exception $e) {
            return $e;
        }
    N'oubliez pas avant de poster :

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    si j'enlève le die,
    ben du coup, il me pète plus d'erreur car je passe plus dans la méthode fault mais dans la result qui traite un "ResultEvent" dans lequel je ne trouve pas d'erreur ...

    Question : pour toi ca marche les erreurs de php tu les récupères dans flex ?

  16. #16
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Effectivement, c'était un peu idiot ...
    bon je sèche
    Sinon j'ai trouvé des forums sur le net, où les gens qui ont ce type d'erreur utilisent 'Charles' pour trouver d'où vient le problème.
    Essaye peut être avec ça pour sniffer tes flux et découvrir l'origine du problème

    [EDIT] : Charles
    N'oubliez pas avant de poster :

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    J'utilise (ou plutot ma boîte m'oblige à utiliser) l'antivirus MacAfee VirusScan,
    peut-il être la source de ce problème ?

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    Bon, ben je m'auto réponds,
    ca ne provient pas de mon antivirus car je viens de le supprimer
    et je n'accede toujours pas aux messages d'erreur souhaité !!!

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 270
    Points : 83
    Points
    83
    Par défaut
    Bon, j'avoue,
    au début, je voulais pas trop "sniffer" les flux parceque
    j'avais déjà essayé avec un logiciel xxx et j'avais rien compris mais c'est vrai que celui il est pas mal et pas trop compliqué,

    bref,
    j'ai sniffé ma requête avec "Charles" et j'ai trouvé ca :
    la response à ma requete est bien "Duplicate entry 'ADM' for key 'PRIMARY'"
    (ce que je veux récupérer comme erreur)
    par contre en suivant un autre le flux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    faultCode:AMFPHP_FILE_NOT_FOUND
    faultdetail : C:\wamp\www\workspace\amfphp\core\shared\app\BasicActions.php on line 33
    faultstring : The class {Amf3Broker} could not be found under the class path {C:\wamp\www\workspace\amfphp\services/amfphp/Amf3Broker.php}
    je suppose donc que j'ai qqchose de pas très bien paramétrer ...
    il me reste à chercher quoi, je suis sous wamp 2.0 et du côté Php, je n'ai rien paramétrer j'avoue mais j'ai pas vu sur les tutaux qu'il y avait qqchose à paramétrer ...

  20. #20
    Membre éclairé
    Homme Profil pro
    Consultant Angular / Java J2EE
    Inscrit en
    Novembre 2008
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Luxembourg

    Informations professionnelles :
    Activité : Consultant Angular / Java J2EE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 545
    Points : 875
    Points
    875
    Par défaut
    Je peux te conseiller sinon de poster ton problème ici. Mihai Corlan saura sûrement te répondre.
    J'ai cherché à plusieurs endroits, mais à part utiliser un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    throw new Exception("....")
    je ne vois pas d'autre solution, donc je ne vois pas pourquoi tu as ce problème.

    As tu essayé de tester juste l'exception ?
    C'est à dire tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ($req == TRUE){
                throw new Exception('Exception OK');
            }
    Si ça ne fonctionne pas, alors ça signifie que Flex n'arrive pas à la récupérer ... ce qui est quand même un peu déroutant ...
    N'oubliez pas avant de poster :

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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