Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je reviens vers vous pour un petit problème entre Zend_Soap_Server et Zend_Soap_AutoDiscover.
J'utilise la classique combinaison des 2 dans une action de mon controller:
if(isset($_GET['wsdl'])) { $autodiscover = new Zend_Soap_AutoDiscover(); $autodiscover->setClass($class); $autodiscover->handle(); } else { $soap = new Zend_Soap_Server("http://monUrl/provisionning/webservice/client?wsdl"); $soap->setClass($class); $soap->setPersistence(SOAP_PERSISTENCE_REQUEST); $soap->registerFaultException('Exception'); $soap->handle(); }
Jusque là, pas de problème. Mais suite à une modification des phpDoc de la class utilisée dans l'autoDiscover Je me suis rendu compte de la chose suivante: Le soapServer utilise une version en cache du wsdl mais je ne sais pas où.
Je m'explique:
Si je fais un __getFunctions() à partir de mon client, les infos de fonctions sont correcte.
Example: ici j'avais oublié un "@return bool", donc dans mon getFunctions, ma fonctions retournais "void".
Après modif du code, __getFunctions me dis bien que la fonction retourne un boolean.
Mais si j'appelle la fonction, j'ai un "NULL"...
J'ai bien désactiver les caches wsdl dans mon php.ini à la fois sur le client et sur le server:
soap.wsdl_cache_enabled=0 soap.wsdl_cache_ttl=1
Et en désespoir de cause je l'ai rajouté dans le _init de mon controller:
public function init() { $this->_helper->viewRenderer->setNoRender(true); $this->_helper->layout->disableLayout(); ini_set("soap.wsdl_cache_enabled", 0); ini_set('soap.wsdl_cache_ttl', 1); }
Mais rien n'y fait, ça me retourne toujours un "NULL".
Pour le moment je l'ai contourné de façon brutale, j'ai fait un copy-paste du wsdl fournis par l'autodiscover et je l'ai placer autre part.
Ça marche mais ce n'est pas une solution viable.
Donc si quelqu'un a déjà eu ce genre de problème je suis tout ouie :-)
Hors ligne