Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Services Web
Services Web Forum d'entraide pour les services Web en PHP, qui permettent de créer et de consommer facilement des webservices (génération de WSDL etc.). Exemples : SOAP, NuSOAP, REST, SCA-SDO... Avant de poster -> Cours webservices
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/04/2007, 11h02   #1
Invité régulier
 
Inscription : août 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 18
Points : 5
Points : 5
Par défaut [SOAP] Passage de paramètre

bonjour à tous,

je cherche à utiliser Pear soap pour interroger des webservice .net via PHP4.
Pour tester j'ai à ma disposition un webservice helloworld auquel je veux passer un paramètre de type int.

J'utilise le code suivant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$wsdl = 'http://192.168.1.1/AA/Service1.asmx?wsdl';
 
require_once('SOAP/Client.php');
 
$owsdl =  new SOAP_WSDL( $wsdl );
$client = $owsdl->getProxy();
$param = array(
	'NombreDeFoisQueTuVeuxLAfficher' => 5);
 
 
$result = $client->HelloWorld($params);
echo $result;

J'obtiens bien un retour du webservice mais mon paramètre n'est pas passé ou sa valeur = 0. Alors qu'il devrait être égal à 5.

j'ai aussi essayé ça :

Code :
1
2
 
$result = $client->HelloWorld(5);
même résultat.

Une idée ?

Merci d'avance.

PS: à noter qu'en php5 tout fonctionne bien.
SDuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 15h58   #2
Invité régulier
 
Inscription : août 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 18
Points : 5
Points : 5
Par défaut Suite

Je poursuit avec mes problèmes, cette fois en php5 :

Voilà mon code :

Code :
1
2
3
4
5
6
7
 
$wsdl = 'http://192.168.87.14/AA/Service1.asmx?wsdl';
$client = new SoapClient($wsdl);
$param->NombreDeFoisQueTuVeuxLAfficher = new SoapVar(5, XSD_INTEGER );
 
$result = $client->HelloWorld($param);
echo $result->HelloWorldResult;
Il fonctionne sans problème tant que le namespace de mon webservice est http://tempuri.org/

Par contre s'il devient : http://192.168.1.1/AA/, ça ne fonctionne plus.
J'obtient :

Citation:
SoapFault exception: [soap:Client] Le serveur n'a pas reconnu la valeur de l'entête HTTP SOAPAction : http://tempuri.org/HelloWorld. in C:\xampp\htdocs\TestDeWebServiceEnPHP\SimpleMessage\SoapClientEMS_5.php:77 Stack trace: #0 [internal function]: SoapClient->__call('HelloWorld', Array) #1 C:\xampp\htdocs\TestDeWebServiceEnPHP\SimpleMessage\SoapClientEMS_5.php(77): SoapClient->HelloWorld(Object(stdClass)) #2 {main}
Je me doute bien que je dois renseigner quelque part le namespace à utiliser, mais je n'y parvient pas.


Au Secour !
SDuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 16h03   #3
Invité régulier
 
Inscription : août 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 18
Points : 5
Points : 5
Je viens de résoudre mon problème avec php5 en ajoutant :

Code :
1
2
 
ini_set("soap.wsdl_cache_enabled", "0");
à suivre....
SDuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 18h08   #4
Invité régulier
 
Inscription : août 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 18
Points : 5
Points : 5
Voilà la suite :

enfin ça fonctionne en php4 et en php5.
  1. pour la version 4 :
    Code :
    1
    2
    3
    4
    5
     
    $wsdl = 'http://192.168.87.14/WebService1/Service1.asmx?wsdl';
    $ns = '{http://tempuri.org/}';
    require_once('SOAP/Client.php');
    $cache = new SOAP_WSDL_Cache();
    • Première possibilité :
      Code :
      1
      2
      3
      4
      5
      6
       
      $owsdl =  new SOAP_WSDL( $wsdl );
      $client1 = $owsdl->getProxy();
      $value = new SOAP_Value($ns.'NombreDeFoisQueTuVeuxLAfficher', 'int', 5);
      $result = $client1->HelloWorld($value);
      echo $result;
    • Deuxième possibilité :
      Code :
      1
      2
      3
      4
      5
       
      $client2 = new SOAP_Client($wsdl);
      $values = array( 'NombreDeFoisQueTuVeuxLAfficher' => new SOAP_Value($ns.'NombreDeFoisQueTuVeuxLAfficher', 'int', 5)  );
      $result2 = $client2->call('HelloWorld',$values);
      echo $result2;

  1. Pour la version 5 :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ini_set("soap.wsdl_cache_enabled", "0");
    $EMS_WS_NAMESPACE = 'http://192.168.87.14/AA/';
     
    $wsdl = 'http://192.168.87.14/AA/Service1.asmx?wsdl';
    $client = new SoapClient($wsdl);
    $param->NombreDeFoisQueTuVeuxLAfficher = new SoapVar(5, XSD_INTEGER, null, null, null, 'http://192.168.87.14/AA/' );
     
    $result = $client->HelloWorld($param);
    echo $result->HelloWorldResult;
SDuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2009, 15h56   #5
Candidat au titre de Membre du Club
 
Inscription : février 2005
Messages : 13
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : février 2005
Messages : 13
Points : 11
Points : 11
Merci infiniment pour ces infos SDuh !
Cela m'a été très utile

Morgann
Morgann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h38.


 
 
 
 
Partenaires

Hébergement Web