Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tableau PHP, Web service et Dataset .Net

4 réponses
Avatar
Yodaz
Bonjour,

J'appelle depuis un script php un web service .Net qui attend en paramètre un
Dataset. J'utilise nuSoap v0.7.2. Le web service .net reçoit bien le Dataset
en paramètre mais n'arrive pas à lire son contenu : j'ai l'exception
"System.IndexOutOfRangeException: Impossible de trouver la table 0." qui est
levée côté .Net.

Voici mon code :

- Appel du web service :

<?php
$myWS=new soapclient('http://serveurtest:2354/test/WSTest.asmx?WSDL',true);
$methodName='WSTest'
$param[] = array('myDataSet'=> $myTab);
$myWS->call($methodName,$param);
?>

- Contenu de $myTab (via un print_r() ) :

Array
(
[0] => Array
(
[ID] => 44783
[ID2] => 27
[UNE_DATE] => 2008-06-25 11:44:02
)

[1] => Array
(
[ID] => 44782
[ID2] => 53
[UNE_DATE] => 2008-06-25 11:44:02
)

[2] => Array
(
[ID] => 44780
[ID2] => 16
[UNE_DATE] => 2008-06-25 11:44:02

)

[3] => Array
(
[ID] => 44768
[ID2] => 32
[UNE_DATE] => 2008-06-25 11:44:02
)
)

- Côté webservice, la signature est la suivante :

<WebMethod()> Public Function WSTest(ByVal myDataSet As DataSet) As DataSet

D'où vient le problème ? Est ce que quelqu'un connaitrait un moyen simple
de convertir un tableau php de façon à ce qu'il soit vu comme un Dataset
"valide" par le webservice ?

Je précise que je ne peux pas modifier quoi que ce soit côté webservice.

Merci d'avance.

--
Plus la femme est légère, plus les dépenses sont lourdes.
-+- Sim -+-

4 réponses

Avatar
Mickael Wolff
Yodaz a écrit :

J'appelle depuis un script php un web service .Net qui attend en paramètre un
Dataset.



Il faudrait définir ce que tu entends par Dataset :)

Bon, plus prosaïquement, je te conseille d'utiliser Wireshark
<http://www.wireshark.org/> pour vérifier que ton PHP envoie bien
l'enveloppe qui va bien au service Web.

Au fait, as-tu vérifié que le webservice répond correctement quand tu
lui envoie une enveloppe forgée avec tes mimines ?

--
Mickaël Wolff aka Lupus Michaelis
http://lupusmic.org
Avatar
Yodaz
Mickael Wolff wrote:
Yodaz a écrit :

J'appelle depuis un script php un web service .Net qui attend en paramètre un
Dataset.



Il faudrait définir ce que tu entends par Dataset :)



Un DataSet au sens objet DataSet .NET :
http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx
(cf. signature de la WebMethod)

Bon, plus prosaïquement, je te conseille d'utiliser Wireshark
<http://www.wireshark.org/> pour vérifier que ton PHP envoie bien
l'enveloppe qui va bien au service Web.




Bonne idée, je vais tester ça.

Au fait, as-tu vérifié que le webservice répond correctement quand tu
lui envoie une enveloppe forgée avec tes mimines ?




J'ai essayé d'appeler le Web Service depuis du code C#, ca marche
parfaitement. J'ai également fait un test avec un autre web service
minimaliste qui prenait une chaîne comme paramètre, et si je l'appelle
depuis PHP ca marche très bien.
Le seul cas qui me poste problème, c'est d'appeler depuis PHP mon Web
service qui prend un DataSet en paramètre, je résume :

- Type simple (chaîne de caractère) :
Appel PHP + Web Service .NET = OK
Appel C# + Web Service .NET = OK

- Type complexe (DataSet) :
Appel PHP (avec un array) + Web Service .NET = Erreur
Appel C# + Web Service .NET = OK

--
Quand on ne travailleras plus le lendemain des jours de repos, la
fatigue sera vaincue.
-+- Pierre Dac -+-
Avatar
Yodaz
Yodaz wrote:
Mickael Wolff wrote:
Yodaz a écrit :

J'appelle depuis un script php un web service .Net qui attend en paramètre un
Dataset.



Il faudrait définir ce que tu entends par Dataset :)



Un DataSet au sens objet DataSet .NET :
http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx
(cf. signature de la WebMethod)

Bon, plus prosaïquement, je te conseille d'utiliser Wireshark
<http://www.wireshark.org/> pour vérifier que ton PHP envoie bien
l'enveloppe qui va bien au service Web.




Bonne idée, je vais tester ça.

Au fait, as-tu vérifié que le webservice répond correctement quand tu
lui envoie une enveloppe forgée avec tes mimines ?






Après investigation, le problème vient de nuSoap qui n'arrive pas à
sérialiser mon tableau php :-
Quand j'affiche les messages de debug de nuSoap, j'ai ça :
"no value provided for complexType element schema, so serialize nothing"

J'ai regardé le schema WSDL de mon web service, et dedans j'ai ceci qui
semble poser problème à nuSoap :

<s:element name="DoTransfert">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="dsActTransfertEntree">
<s:complexType>
<s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>

Etant donnée mes faibles connaissances en web service, est ce qu'une âme
charitable pourrait m'aider à y voir plus clair ?

Merci d'avance.


--
Parler pour ne rien dire ou ne rien dire pour parler sont les deux
principes majeur de tout ceux qui ferait mieux de la fermer avant de
l'ouvrir.
-+- Pierre Dac -+-
Avatar
Olivier Miakinen
Le 26/06/2008 17:27, Yodaz a écrit :

Etant donnée mes faibles connaissances en web service, est ce qu'une âme
charitable pourrait m'aider à y voir plus clair ?



Comme j'en connais encore moins que toi sur le sujet, je ne peux pas
t'aider. Cela dit, je ne suis pas sûr que rester dans le groupe consacré
à PHP soit le meilleur moyen de trouver des experts en web services.


Mais ce qui m'incite à te répondre est encore plus hors charte que les
web services (raison pour laquelle je positionne le suivi vers ma boîte
aux lettres) : est-ce que tu as une raison particulière d'en vouloir à
Pierre Dac ? Je demande ça parce que ça fait deux fois de suite que tu
lui attribues des phrases avec de grosses fautes d'orthographe, dont je
suis bien certain qu'il ne les aurait pas publiées ainsi.

Citation 1 :
Quand on ne travailleras plus le lendemain des jours de repos, la
fatigue sera vaincue.
-+- Pierre Dac -+-



C'est *travaillera* sans s.

Citation 2 :
Parler pour ne rien dire ou ne rien dire pour parler sont les deux
principes majeur de tout ceux qui ferait mieux de la fermer avant de
l'ouvrir.
-+- Pierre Dac -+-



1) *majeurs*
2) *tous* ceux
3) *feraient*

En outre, je suis quasi certain que Pierre Dac avait employé un « et »
au lieu d'un « ou ».


[ suivi positionné en privé ]