Page 1 sur 1

Php, webservice et SOAP

Posté : 28 oct. 2008, 18:54
par ElSegador
Bonjour,

Je suis nouveau sur ce forum en tant que participant même si j'ai souvent puisé des infos ici par le passé.

Voilà, j'ai développé un petit webservice qui me permet d'écrire dans une base de données, des données de benchmark, et de lire ladite base afin de faire des graphes.
J'ai déjà fait des clients en C# (qui sont des services windows) qui accèdent à ce webservice. Leur but est d'écrire dans la base de données et cela marche sans problème.
Par contre, j'essaie de faire un client en PHP afin de lire ma bdd (pour produire mes graphes), et là, je galère.

En fait, dans mon client, je commence par appeler une page php qui s'appelle CreateHeader.php, et qui sert à faire l'authentification NTLM. Le code est celui que l'on peut trouver sur le net (par ex ici http://www.phpcs.com/codes/NTLM-GET-LOG ... ­5272.aspx).

j'ai ajouté toute fois ceci:
if ( $login != NULL){
					$IsLogIn = true;
					if ( $_COOKIE['PSESSION'] )
					session_id($_COOKIE['PSESSION']);
					error_log("session_id:".session_id());
					if(session_id()=="" )
					{
						error_log("------------ NEW SESSION ------------");
						$res = session_start();
						setcookie('PSESSION',session_id());
						$_SESSION['login']=$login;
					}
				}
En fait, une fois que l'authentification NTLM est faite, je vérifie que j'ai bien un login et si c'est bon, je créer une session.
NOTA: cette page est aussi appelé par le serveur.

Cela semble bien marcher, car je récupère bien le bon domaine et le nom de l'utilisateur.

Là où ça se complique c'est ensuite, quand j'essaie de créer le client.
La création proprement dite se passe bien, mais dès que j'essaie de lancer une fonction, j'ai une erreur du type:
Message = SoapFault exception: [HTTP] Unauthorized in C:\Program Files\EasyPHP 2.0b1\www\clientP4.php:22 Stack trace: #0 [internal function]: SoapClient->__doRequest('__soapCall('login', Array) #2 {main}
Ci-dessous, le code de mon client:
<?php
require_once("CreateHeader.php"); //le code est comme celui du lien ci-dessus
?>

<?php

if($IsLogIn){
try {
echo "IsLogIn:".$IsLogIn."<br/>";

$client = new SoapClient('http://127.0.0.1/fichier.wsdl',
array(
'uri' => "http://127.0.0.1/Server.php",
'trace' => 1,
'soap_version' => SOAP_1_1
)
);

$obj = $client -> __soapCall('getP4Benchmark',array());

var_dump($obj);

echo "End ------";
}

catch(SoapFault $e){
printf("Message = %s\n",$e->__toString());
}
}
?>
Je ne peux pas tout mettre sur ce forum, mais de personne à personne, je pourrais vous envoyer mon code de façon plus complète.

Si vous avez des pistes, je suis preneur.

Merci d'avance pour votre aide!

Posté : 28 oct. 2008, 21:34
par stopher
salut ,

Puisque tu travail en mode wsdl , si tu enlèves le deuxiéme argument à la construction de SoapClient

donc comme ceci :

Code : Tout sélectionner

$client = new SoapClient('http://127.0.0.1/fichier.wsdl');
Est ce que juste cette ligne de revoie un message d'erreur ? (sans ajouter le suite du code)[/code]

Posté : 28 oct. 2008, 23:13
par zeus
Modération :
ElSegador, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ

Posté : 29 oct. 2008, 09:53
par Invité
O Grand Zeus! Merci d'avoir édité mon post. Effectivement, c'est plus lisible. J'utiliserai à l'avenir les balises de code.

Stopher>
En utilisant la délcaration du client:
$client = new SoapClient('http://127.0.0.1/fichier.wsdl'); 
Je n'ai pas d'erreur mais cela ne règle pas le problème d'autorisation.

J'ai l'impression que l'autorisation NTLM que j'obtiens en passant dans la page NTLM se perd en route quelque part. Mais je ne sais pas ce qui provoque ça.

Quelqu'un a-t'il déjà eu des problèmes à ce niveau là?

Merci d'avance ^_^