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 :

[Débutant] Première communication Zend_Amf <-> flex


Sujet :

Flex

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut [Débutant] Première communication Zend_Amf <-> flex
    Bonjour,

    J'essaie de coder une communication flex vers zend amf la plus simple possible.

    Voici mes fichiers :

    index.php

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
     
    <?php
    error_reporting(E_ALL );
    ini_set('display_startup_errors', 1);
    ini_set('display_errors', 1); 
      
    // PATH_SEPARATOR
    set_include_path('../lib/vendor/ZendFramework/library');
     
    require_once("Zend/Loader/Autoloader.php");
     
    $autoloader = Zend_Loader_Autoloader::getInstance();
     
    // Attached class
     
    class Foo
    {
        /**
         * @param  string $name
         * @param  string $greeting
         * @return string
         */
        public function hello($name, $greeting = 'Hello')
        {
            return $greeting . ', ' . $name;
        }
    }
     
    $server = new Zend_Amf_Server();
    $server->setClass('Foo');
    $server->addDirectory(dirname(__FILE__) .'/../services/');
    $response = $server->handle();
    echo $response;
     
     
    ?>
    quand on appelle cette page dans le navigateur j'obtiens le message suivant :

    Mon fichier mxml dans flex builder :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    	
    <mx:RemoteObject id="myservice"
        fault="faultHandler(event)"
        showBusyCursor="true"
        destination="zend">
    </mx:RemoteObject>
    
    	<mx:TextInput id="nom"   top="10"  left="10"  />
    	<mx:TextInput id="type"  top="40"  left="10"  />
    	<mx:Button    click="transmit()"           top="70"  left="10"  />
    	<mx:TextArea  id="debug" top="200" left="200" height="500" width="500" />
    	
    	<mx:Script>
    		<![CDATA[
    		
    			function transmit():void
    			{
    		
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		var msg:String=myservice.Foo.hello("Wade");
    Application.application.nom.text+=msg; } function faultHandler(event:Event):void { Application.application.debug.text+=event; trace(event); } ]]> </mx:Script> </mx:Application>
    Et mon fichier services-config.xml

    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
    24
    25
     
    <?xml version="1.0" encoding="UTF-8"?>
    <services-config>
        <services>
            <service id="zend-service"
                class="flex.messaging.services.RemotingService"
                messageTypes="flex.messaging.messages.RemotingMessage">
                <destination id="zend">
                    <channels>
                        <channel ref="zend-endpoint"/>
                    </channels>
                    <properties>
                        <source>*</source>
                    </properties>
                </destination>
            </service>
        </services>
        <channels>
            <channel-definition id="zend-endpoint"
                class="mx.messaging.channels.AMFChannel">
                <endpoint uri="http://localhost/~karas/zf/ngs/asg/01/web/index.php"
                    class="flex.messaging.endpoints.AMFEndpoint"/>
            </channel-definition>
        </channels>
    </services-config>
    Et bien quand j'appuie sur le bouton il ne se passe rien.
    Je sais que le bouton marche car quand je remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    		var msg:String=myservice.Foo.hello("Wade");
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    		var msg:String=myservice.hello("Wade");
    J'obtiens des messages d'erreur.

    Pouvez vous m'aider. Merci

  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
    Es-tu sur de ton endpoint dans ton fichier services-config.xml ?

    Il me semble que tu doives le faire pointer sur le dossier ou tu place ton code server , et non sur le fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <channel-definition id="zend-endpoint" class="mx.messaging.channels.AMFChannel">
           <endpoint uri="http://localhost/~karas/zf/ngs/asg/01/web"
                  class="flex.messaging.endpoints.AMFEndpoint"/>
    </channel-definition>
    (pour ton dossier il me semble)
    N'oubliez pas avant de poster :

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut
    Bonjour Krazymins et merci de ton aide.

    J'ai vu des exemples sur Internet où il font en effet pointer sur un répertoire.

    Mais j'ai pas compris ce que dois contenir ce répertoire. Car je suis partie d'une architecture standard Zend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    application  controllers  datas  html  lib  models  views  web
    Et mon web contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _index.php  index.php
    _index.php étant un fichier brouillon.

    Cependant le répertoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ~/public_html/zf/ngs/asg/01/lib/vendor/ZendFramework/library/Zend/Amf
    Contient ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Adobe  Constants.php  Parse    Request.php  Response.php  Server.php  Value
    Auth   Exception.php  Request  Response     Server        Util
    Dans le cadre d'une application Zend comment je dois faire pointer mes répertoires. Cela m'étonne que je dois faire pointer directement sur les répertoires libs.

    merci

  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
    Salut

    alors en fait le endpoint pointe vers le fichier de ton server donc là où tu aura ton code server, avec ton index.php, tes fonctions server etc.

    Quelquechose qui pourra peut être plus t'aider et qui sera sûrement plus clair :

    http://corlan.org/2008/10/10/flex-an...g-with-amfphp/

    et sinon:

    http://www.adobe.com/devnet/flex/art...php_print.html (utilisant le zend framework)



    C'est un tuto te montrant comment utiliser Flex avec amfPhp, comment l'installer. Le tout avec des VO du côté Flex et du côté Php pour une manipulation aisée des objets qui transitent..

    Je te laisse le découvrir
    N'oubliez pas avant de poster :

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut
    J'ai recommencé un nouveau code en me basant sur le tutoriel suivant :

    http://blog.eexit.net/dev_web/2009/0...-versions.html

    et j'obtiens l'erreur suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    faultCode:Client.Error.MessageSend faultString:'Send failed' faultDetail:'Channel.Connect.Failed error NetConnection.Call.BadVersion: : url: 'http://localhost/~karas/zf/ngs/asg/02/web/''
    Pouvez vous m'aider svp ?

  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 mes souvenirs sont bons ( je n'ai pas relu les tutos que je t'avais mis en lien) le endpoint pointe vers la gateway (gateway.php) (dans le cas d'amf en fait, si c'est zend je crois que c'est pour le dossier server)

    Réessaye peut-être en plaçant le chemin vers la gateway

    Et sinon, as-tu regardé les liens que je t'avais mis ?
    tu as aussi le blog de phiphou :
    http://blog.phiphou.com/index.php/?2...avec-amfphp-19

    tu devrais trouver tes réponses la dedans qui seront plus claires que les miennes
    N'oubliez pas avant de poster :

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 111
    Points : 38
    Points
    38
    Par défaut
    Alors j'ai réussi à faire fonctionner l'exemple du tuto

    http://blog.eexit.net/dev_web/2009/0...-versions.html

    mais j'avais deux problèmes:

    un caractère exogène dans le fichier php c'est à dire en dehors des balises <?php ?>

    et j'ai rajouter ce bout de code d'un autre tutoriel que tu m'as donné en lien. Cependnat ce tutoriel est pour flex 2 donc est-ce toujours d'actualité de faire ainsi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<mx:RemoteObject id="myRemote" destination="zend" source="Hello_Service">
    	<mx:method name="getHelloWorld" 
                   result="resultHandler(event)"
                   fault="faultHandler(event)"/>
        </mx:RemoteObject>

  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
    okay.
    c'est le "problème" avec Amf je trouve (ça n'engage que moi ): c'est que si tu as un soucis quelquepart ce n'est pas forcément aisé de savoir d'où vient l'erreur (problème dû au code ou à la configuration)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <mx:RemoteObject id="myRemote" destination="zend" source="Hello_Service">
     <mx:method name="getHelloWorld"
                   result="resultHandler(event)"
                   fault="faultHandler(event)"/>
        </mx:RemoteObject>
    Pour flex 3, je pense qu'il n'y a pas de problème

    Tu peux l'écrire directement en as dans un model aussi
    N'oubliez pas avant de poster :

  9. #9
    Membre du Club Avatar de eexit
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 61
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Le soucis, c'est que le protocol AMF est du type SOAP et avec SOAP, si le serveur merde, tu n'as aucune remontée d'erreur. Les exceptions ne sont donc pas gérable du côté serveur mais seulement du côté client donc si ton serveur à merdé, c'est à ton client (Flex) de gérer l'exception pour éviter d'afficher des erreurs...

    Pour avoir faire un petit travail de recherche sur les dernières versions de Zend_Amf, je peux vous dire qu'il y a encore pas mal de bugs dépendant de la machine avec laquelle on est (Windows/Unix).

    AMFPHP est mort, il faut désormais s'orienter vers des librairies régulièrement mise à jour du type Zend_Amf ou le plugin Amf de Symfony.
    Etudiant L3 Informatique
    --
    Twitter | Blog | Website

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication entre Applet et Flex
    Par aldev.web dans le forum Flex
    Réponses: 1
    Dernier message: 09/09/2010, 09h56
  2. [AC-2003] Débutant Première macro
    Par chicabonux dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2010, 09h44
  3. Communication entre Java et Flex
    Par Elmotardo dans le forum Général Java
    Réponses: 0
    Dernier message: 30/04/2009, 11h27
  4. [Débutant] Bibliothèque commune à tous les projets
    Par genamiga dans le forum NetBeans
    Réponses: 2
    Dernier message: 07/01/2008, 10h43
  5. [Débutant][Applet] Communication avec Servlet - IO Exception
    Par gandalf_le_blanc dans le forum Applets
    Réponses: 35
    Dernier message: 16/04/2004, 13h29

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