Discussion:
Tableau PHP, Web service et Dataset .Net
(trop ancien pour répondre)
Yodaz
2008-06-25 18:52:20 UTC
Permalink
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 -+-
Mickael Wolff
2008-06-25 23:04:00 UTC
Permalink
Post by Yodaz
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
Yodaz
2008-06-26 07:23:36 UTC
Permalink
Post by Mickael Wolff
Post by Yodaz
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)
Post by Mickael Wolff
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.
Post by Mickael Wolff
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 -+-
Yodaz
2008-06-26 15:27:34 UTC
Permalink
Post by Yodaz
Post by Mickael Wolff
Post by Yodaz
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 :)
http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx
(cf. signature de la WebMethod)
Post by Mickael Wolff
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.
Post by Mickael Wolff
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 -+-
Olivier Miakinen
2008-06-27 06:36:18 UTC
Permalink
Post by Yodaz
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.
Post by Yodaz
Quand on ne travailleras plus le lendemain des jours de repos, la
fatigue sera vaincue.
-+- Pierre Dac -+-
C'est *travaillera* sans s.
Post by Yodaz
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é ]

Continuer la lecture sur narkive:
Loading...