Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 03-10-2008 11:13:31

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

[Résolu][Zend_Soap] Moi juste vouloir dire bonjour

Salut à tous,

Dans le cadre de mon projet j'ai besoin de faire un serveur Soap.  Je me dis chouette ça tombe bien, ils viennent justement d'inclure ça au ZF1.6, on va en profiter !!

Et c'est le drame hmm

non seulement ça ne marche pas, mais en plus je n'ai aucun message d'erreur sad

Pour résumé, j'ai 4 fichiers sur deux serveurs:

serveur distant:
- wsdl.php            <= le fichier contenant l'auto-discover du ZF pour creer le fichier wsdl
- test.class.php    <= une simple class bidon avec une fonction qui dit bonjour
- server.php         <= Le fichier contenant le serveur soap

serveur local:
- index.php           <= contenant la connection au soap distant et voulant afficher le résultat de ma fonction

voici le contenu des fichiers:

wsdl.php

Code:

require_once 'test.class.php';
require_once 'Zend/Soap/AutoDiscover.php';

$autodiscover = new Zend_Soap_AutoDiscover();
$autodiscover->setClass('test');
$autodiscover->handle();

test.class.php

Code:

class test
{
    /**
     * test function for soap server
     *
     * @param string $ami
     * @return string
     */
    public function who($ami)
    {
        return 'you are '.$ami;
    }
}

server.php

Code:

    
try
{
    $server = new Zend_Soap_Server('http://192.168.2.72/soap/wsdl.php', $option);
    $server->handle();
}
catch (SoapFault $e)
{
    print_r($e);
}

index.php

Code:

try {
    $client = new Zend_Soap_Client('http://192.168.2.72/soap/wsdl.php');
    echo $client->who('erwan');
}
catch (SoapFault $e)
{
    print_r($e);
}

Si je vai en direct sur l'url du fichier wsdl j'ai un magnifique xml qui s'affiche et qui, dans mes maigres moyens' m'a l'air correct.

Par contre, en direct sur le server.php, il m'affiche ceci:

Code:

<SOAP-ENV:Envelope>
    <SOAP-ENV:Body>
        <SOAP-ENV:Fault>
            <faultcode>0</faultcode>
            <faultstring>Invalid XML</faultstring>
        </SOAP-ENV:Fault>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Je ne sais pas si c'est une erreur, ou bien si c'est juste parce que j'essaye d'y acceder en direct sasn aucune request hmm

Et quand à mon fichier index.php, il reste désespérément vide neutral


Si quelqu'un voit une erreurs, ou à une piste, je suis preneur big_smile

Dernière modification par Asfaloth (27-10-2008 16:04:27)


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

#2 03-10-2008 17:14:07

ichevc02
Membre
Date d'inscription: 25-07-2007
Messages: 127

Re: [Résolu][Zend_Soap] Moi juste vouloir dire bonjour

Bonjour,

dans server.php

il manque :

Code:

$server->setClass('test');

tu n'a pas associé de class a ton serveur soap.


remarque :
attention a l'autodiscover : avec des type simple il marche tres bien .. avec des types complex ca marchait tres mal (du moins sur les version jusque 1.5.2)

Dernière modification par ichevc02 (03-10-2008 17:18:36)

Hors ligne

 

#3 20-10-2008 16:18:24

thomasb
Membre
Date d'inscription: 26-05-2008
Messages: 30

Re: [Résolu][Zend_Soap] Moi juste vouloir dire bonjour

J'ai exactement le meme soucis ....
Pas de solution?

Hors ligne

 

#4 22-10-2008 16:10:50

Asfaloth
Membre
Lieu: Bruxelles
Date d'inscription: 13-05-2008
Messages: 83
Site web

Re: [Résolu][Zend_Soap] Moi juste vouloir dire bonjour

Salut,

Après une loooongue prise de tête, je suis enfin parvenu à faire fonctionner ce ******** de server Soap.

Pour ceux que ça interresse, voici mon code de test, maintenant plus qu'a faire une class sérieuse derriere...

Première Etape (INDISPENSABLE EN ENVIRONNEMENT DE TEST):

Désactiver la mise en cache du fichier WSDL dans votre php.ini mad
Très con mais c'est ce qui m'a bloqué pendant une semaine (jusqu'a ce que lundi je fasse un refresh du code qui marchait pas le vendredi et pouf, ça marche roll).
Donc dans votre php.ini mettre le "soap.wsdl_cache_enabled" à 0 au lieu de 1.  Ceci sur la machine client

Code:

[soap]
; Enables or disables WSDL caching feature.
soap.wsdl_cache_enabled=0
; Sets the directory name where SOAP extension will put cache files.
soap.wsdl_cache_dir="/tmp"
; (time to live) Sets the number of second while cached file will be used 
; instead of original one.
soap.wsdl_cache_ttl=86400

Une fois que ce problème de wsdl qui ne se met jamais à jour est réglé, le reste va beaucoup plus vite:

ma class de test:

Code:

<?php

class SoapService
{
    /**
     * @return string
     */
    public function helloWorld()
    {
        return "Hello Me!";
    }

    /**
     * @return array
     */
    public function getFruits()
    {
        return array('apple', 'orange', 'banana');
    }
    
    /**
     * @return string
     */
    public function getWorld()
    {
        return "Hello getWorld!";
    }

    /**
     * @param string $me
     * @return string
     */
    public function moi($me)
    {
        if (empty($me))
        {
            throw new Exception('$me est vide');
        }
        $return = 'hahahaah tu es '.$me;
        return $this->_test($return);
    }
    
    private function _test($value)
    {
        $return = strtoupper($value);
        return $return;
    }
}
?>

Ma page server.php

Code:

<?php


// Set error reporting
error_reporting(E_ALL|E_STRICT);
// Set Timezone
date_default_timezone_set('Europe/Brussels');
    
set_include_path('.' 
    . PATH_SEPARATOR .'../library'
    . PATH_SEPARATOR .get_include_path());
    
require_once "test.class.php";
require_once "Zend/Soap/Server.php";
require_once "Zend/Soap/AutoDiscover.php";

if(isset($_GET['wsdl'])) {
    $autodiscover = new Zend_Soap_AutoDiscover();
    $autodiscover->setClass('SoapService');
    $autodiscover->handle();
} else {
    
    $options = array('soap_version' => SOAP_1_1);
    
    $soap = new Zend_Soap_Server("http://localhost/soap/server.php?wsdl", $options); // this current file here
    $soap->setClass('SoapService');
    $soap->handle();
}
?>

Et enfin, la page coté client:

Code:

<?php
// Set error reporting
error_reporting(E_ALL|E_STRICT);
// Set Timezone
date_default_timezone_set('Europe/Brussels');
    
set_include_path('.' 
    . PATH_SEPARATOR .'./library'
    . PATH_SEPARATOR .get_include_path());
    
require_once 'Zend/Loader.php';
// Automatically require files for class
Zend_Loader::registerAutoload();

$options = array();

try {
    $client = new Zend_Soap_Client("http://192.168.2.72/soap/server.php?wsdl", $options); // Servers WSDL Location

       print_r($client->getFunctions());
       echo '<br />'.$client->moi('Toto');
} catch(Exception $e) {
    echo '<pre>';
    print_r($e);
    echo '</pre>';
}

?>

Voilà voilà, en esperant que ça en aide d'autres....


La capacité d'apprendre est un don.
La faculté d'apprendre est un talent.
La volonté d'apprendre est un choix.
-=[ Frank Herbert ]=-

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages