Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Hello,
je me lance dans les web services avec Soap_Client et _Server et cela marche tres bien en local :
Le service (commentaires phpdoc obligatoire ! ) :
<?php ini_set("soap.wsdl_cache_enabled", "0"); require_once 'Zend/Soap/AutoDiscover.php'; require_once 'Zend/Soap/Server.php'; require_once 'Zend/Soap/Client.php'; class Custom_Service_Webservice_Ws { /** * Return a string * @param int $a * @param int $b * @return int */ public function add($a, $b) { $sum =0; if (is_numeric($a) and is_numeric($b)) { $sum = $a + $b; } return (int)$sum; } /** * Return a string * @param string $type * @return string */ public function getMyText($text) { return $text; } }
Le controller de test :
<?php require_once APPLICATION_PATH. '/../library/Custom/Service/Webservice/Ws.php'; class WebserviceController extends Zend_Controller_Action { public function indexAction() { $urlWS = Zend_Registry::get('config')->webservice->url; if (is_null($this->getRequest()->getParam('wsdl'))) { // Traitement de la requête $server = new Zend_Soap_Server($urlWS); $server->setClass('Custom_Service_Webservice_Ws'); $server->handle(); } else { // Retour de la WSDL $wsdl = new Zend_Soap_AutoDiscover(); $wsdl->setClass('Custom_Service_Webservice_Ws'); $wsdl->handle(); } exit(); } } ?>
et le client SOAP :
<?php class WsclientController extends Zend_Controller_Action { public function indexAction() { $urlWS = Zend_Registry::get('config')->webservice->url; if ($urlWS != '') { // Appel du WebService $options = array('soap_version' => SOAP_1_1); $client = new Zend_Soap_Client($urlWS, $options); echo "=>" . $client->add(1,5) . '<br>'; echo "=>" . $client->getMyText("test test test"); } else { echo "Erreur d'url !"; } $this->_helper->viewRenderer->setNoRender(); } } ?>
Tout ce petit monde marche tres bien en local(host), de url local à url local, avec le controller de test, comme ceci : http://zf.test/wsclient/?wsdl
Lorsque je test de local à en ligne en changeant la ligne :
$urlWS = Zend_Registry::get('config')->webservice->url;
j'ai cette erreur :
Fatal error: SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.mon-site-en-ligne.fr/dev/zf/public/webservice/?wsdl' : Premature end of data in tag definitions line 2 in D:\wamp\offline-shared\includes\zf\svn\trunk\library\Zend\Soap\Client\Common.php on line 51
et de "en ligne" à "en ligne" j'ai cela :
Message: SOAP-ERROR: Parsing WSDL: Couldn't load from ''http://www.mon-site-en-ligne.fr/dev/zf/public/webservice/?wsdl'' : failed to load external entity "'http://www.mon-site-en-ligne.fr/dev/zf/public/webservice/?wsdl'"
Une idée ?
Merci
Fabrice
Hors ligne
pour pouvoir se connecter sur un autre site
il faut que ton hébergeur l'autorise. ce qui n'est pas toujours le cas.
il me semble que ZF utilise CURL s'il est présent, les Sockets ou les wrapper fopen
et la couche HTTP
ces élément sont configurable sur le serveur et ne sont donc pas toujours disponible
un phpinfo() sur ton serveur devrait te renseigner
A+JYT
Hors ligne
hello,
CURL, les sockets, ou le "allow_url_fopen" sont bien à On ou Enabled.
Il y aurait une autre option à configurer ?
Merci
Fabrice
Hors ligne
ouvre avec ton navigateur
http://www.mon-site-en-ligne.fr/dev/zf/ … vice/?wsdl
et
http://zf.test/wsclient/?wsdl
tu dois obtenir 2 xml identique à l'adresse près <soap:address>
A+JYT
Hors ligne
yes, j'ai les mêmes xml. Sauf tous les tags qui ont une url bien sûr.
2 copies d'écrans ?
F.
Hors ligne
Bon alors déjà le problème d'adaptateur pour les requêtes n'est à mon sens pas lié au Framework mais uniquement au SoapClient. le Soap client du zend Framework utilise presque directement les sous fonctions de l'extension soap de PHP. C'est donc l'extension qui effectue la requête pour récupérer le WSDL et le parser.
On utilise pas du tout Zend_Http ici.
Par contre je suis étonné que tu ais bien les WSDL en allant sur chaque URL et que le code ne marche que de local à local. Si je devais parier, je pencherais pour un problème de proxy. Le navigateur que tu utilises n'aurait pas un proxy pour accéder au net ? Si tu as quelque chose du genre, il faut aussi le configurer au niveau du client Soap. Cela n'expliquerait pas le problème de en ligne à en ligne cependant. Mais pas sur que ton hébergeur te laisse faire des requêtes sortante vers lui même...
Si ce n'est pas le cas, tu peux toujours tester depuis un autre client Soap comme SoapUI pour vérifier si c'est le client qui a un problème, ou le serveur. Cet outil est très pratique et complet.
Hors ligne
hello,
Je viens d'installer Soapui (ne marche pas en installer windows, en zip oui). J'ai créé un projet, et j'ai la même erreur dans les TestCase .
J'ai pas passé 4 heures avec ce soft dessus non plus pour savoir d'où cela peut venir.
Je vais essayer de voir çà mais je n'ai guère avancé.
F.
Hors ligne
lors de la création du projet dans le chemin du wsdl on peut mettre directement l'url, si il arrive à charger l'url et créer le projet, c'est que ton wsdl est bien directement accessible. Si il n'y arrive pas alors que ton navigateur affiche le wsdl, je conseille de vérifier si ton navigateur n'utiliserait pas un proxy pour accéder au net... Si c'est le cas, il faut le paramétrer dans les clients soap, que ce soit celui de soap ui ou php...
Lorsque soap ui échoue à interpréter le wsdl, on peut regarder dans les onglets d'erreur pour avoir le détail. Si il n'arrive même pas à le récupérer, c'est différent.
Hors ligne
Tous les navigateurs ne revoient pas la même chose pour le lien direct du wsdl :
IE & Opera : le XML
FF et Safari : juste les commentaires (les return de phpdoc)
Chrome : du code bizarre...
Je vais tester un peu + avec SoapUI, car , par contre, pour l'appel du client soap (qui accede au service), tous les navigateurs renvoies la même erreur.
F.
Hors ligne
Alors moi j'ai résolu mon pb en installant php-soap sur ma debian . Donc regarde de ce coté.
Hors ligne
lebilien a écrit:
Alors moi j'ai résolu mon pb en installant php-soap sur ma debian . Donc regarde de ce coté.
Je vois pas comment et pourquoi soap-php peut m'aider. Zend ne gère pas çà déjà ?
F.
Hors ligne
Il a voulu dire que l'extension soap était manquante sur son serveur et qu'il a du l'ajouter avec le package php-soap sur sa debian...
Hors ligne
jboffel a écrit:
Il a voulu dire que l'extension soap était manquante sur son serveur et qu'il a du l'ajouter avec le package php-soap sur sa debian...
Merci pour la traduction
Hors ligne
ha ok. Et non, j'ai bien l'extension soap qui est activée...
Donc, c'est autre chose je pense
F.
Hors ligne
Ce topic est vieux, mais je voudrais rajouter une précision :
J'ai vu sur le forum US de Zend Framework que cela pouvait être du à la version 5.3.0 de PHP,
Solution : upgrader PHP
En tout cas cela a été mon cas, donc faire attention à ça aussi....
source:
http://forums.zend.com/viewtopic.php?f=69&t=5136
Hors ligne
je profite du déterrage de topic. J'ai exactement le même soucis.
Marche en local sur le pc d'un développeur, pas sur le mien ni sur le serveur de production. Il est sur une ubuntu avec les paquet apache2 et php5. Le serveur et moi somme sur une debian stable.
Config apache la même. php.ini les même excepté les différences de path.
Le développeur est en php 5.3.5-1Ubuntu et le serveur en 5.3.5-0Suhosin. Pour ma part je suis en 5.3.14
C'est à n'y rien comprendre....
Hors ligne