Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai un appel soap ici :
try {
$client = new Zend_Soap_Client('http://www.monSite.com/syndication.asmx?WSDL');
pr($client->getFunctions());
} catch(Zend_Exception $e){
pr($e->getMessage());
}Le pr() me renvoi un tableau de fonctions :
Array
(
[0] => getFieldsSearchResponse getFieldsSearch(getFieldsSearch $parameters)
[1] => DataSet getFieldsSearch(string $idModule)
)Je souhaiterais utiliser la fonction "getFieldsSearch", mais je ne sais pas comment m'y prendre. J'ai bien un id de module $idModule, mais je ne sais pas comment l'utiliser.
Voici mon test :
try {
$client = new Zend_Soap_Client('http://www.monSite.com/syndication.asmx?WSDL');
pr($client->getFieldsSearch());
} catch(Zend_Exception $e){
pr($e->getMessage());
}Mais cela me renvoie cette erreur :
Fatal error: Uncaught SoapFault exception: [soap:Client] Unable to handle request without a valid action parameter. Please supply a valid soap action. in /Zend/Soap/Client.php:1062 SoapClient->__soapCall('getFieldsSearch', Array, NULL, NULL, Array) #1 [internal function]: Zend_Soap_Client->__call('getFieldsSearch', Array) #2 Zend_Soap_Client->getFieldsSearch()
(...)
Que veut dire "Unable to handle request without a valid action parameter. Please supply a valid soap action." ???
Dernière modification par efusien (16-06-2009 18:48:53)
Hors ligne
Bonsoir,
La fonction que tu appelles attend un paramètre on dirait:
getFieldsSearch(getFieldsSearch $parameters)
L'erreur vient sans doute de là ![]()
A+ benjamin.
Hors ligne
Effectivement,
Si je fais un $client->getTypes() je trouve le tableau suivant :
Array
(
[0] => struct getFieldsSearch {
string idModule;
}Seulement voilà, même en passant en paramètre l'ID de mon module, cela retourne la même erreur :
"Unable to handle request without a valid action parameter. Please supply a valid soap action."
Mon code :
try {
$client = new Zend_Soap_Client('http://www.monSite.com/syndication.asmx?WSDL');
pr($client->getFieldsSearch('IDdeMonModule'));
} catch(Zend_Exception $e){
pr($e->getMessage());
}Pour info, voici la requête que je suis censé envoyé au serveur soap :
POST /syndication.asmx HTTP/1.1
Host: http://www.monSite.com
Content-Type: text/xml; charset=utf-8
Content-Length: (...)
SOAPAction: "http://www.monSite.com/webservices/getFieldsSearch"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<getFieldsSearch xmlns="http://www.monSite.com/webservices/">
<idModule>string</idModule>
</getFieldsSearch>
</soap:Body>
</soap:Envelope>Avec Zend_soap_client, est t-il possible d'afficher la requête que l'on envoie au serveur ? Il y a bien __getLastRequest(), mais vu que mon appel renvoie un fatal error rien n'est affiché...
Quel est le moyen pour passer le "SOAPAction", dont la valeur serait ici "http://www.monSite.com/webservices/getFieldsSearch" ? C'est peut-être là le soucis ?
Je ne trouve pas de doc vraiment précise sur le zend_soap_client sur le web, seulement des exemples très simples, avec lesquels il est difficile de s'appuyer...
Hors ligne
En utilisant la classe SoapCLient j'ai un résultat en retour :
try {
$client = new SoapClient('http://www.monSite.com/syndication.asmx?WSDL');
$response = $client->getFieldsSearch(array('idModule' => 'myIDModuleString'));
pr($response);
} catch(Zend_Exception $e){
pr($e);
}Le retour :
stdClass Object
(
[getFieldsSearchResult] => stdClass Object
(
[schema] =>
[any] => mesResultatsIci..........
)
)Ici j'ai donc bien ma fonction getFieldsSearch qui marche, avec en paramètre idModule (string). Pourquoi avec le Zend_soap_client cela ne fonctionne pas ??? :-/
Hors ligne
Le problème est résolu : cette erreur provient du fait que je n'ai pas indiqué la version de SOAP.
Il suffit donc d'indiquer la version de SOAP dans les options :
$wsdl = 'http://www.monSite.com/syndication.asmx?WSDL';
$options = array('soap_version' => SOAP_1_1);
$client = new Zend_Soap_Client($wsdl, $options);Ici j'utilise par exemple la constante SOAP_1_1.
Hors ligne