Bonjour,
J'essaye de me connecter via .NET (4.5, VS2012) à un service web écrit en PHP. Ce service web utilise le type apache:Map mais le WSDL ne contient pas la définition de ce type et il donc impossible d'utiliser "Ajouter une référence de service..." depuis VS2012. J'ai donc téléchargé le fichier WSDL sur mon ordinateur et j'ai ajouté une définition que j'ai trouvé sur le net :
que j'ai ajouté dans les wsdl:types.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <xsd:schema targetNamespace="http://xml.apache.org/xml-soap"> <xsd:complexType name="mapItem"> <xsd:sequence> <xsd:element name="key" nillable="true" type="xsd:anyType"/> <xsd:element name="value" nillable="true" type="xsd:anyType"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="Map"> <xsd:sequence> <xsd:element maxOccurs="unbounded" minOccurs="0" name="item" type="apache:mapItem"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
Une fois l'ajout fait, l'ajout de référence sur le service (en sélectionnant le fichier) fonctionne et j'ai le proxy qui est bien généré. L'appel des différentes méthodes fonctionne du moment que apache:Map n'est pas utilisé. Quand j'essaye d'utiliser une fonction avec apache:Map, j'ai une erreur :
D'après ce que j'ai lu, c'est lié au fait que .NET attend des SOAP Document/Literal mais que PHP utilise RPC/Encoded. Est-ce qu'il y a un moyen de contourner ce problème ? Les différentes méthodes que j'ai testé / trouvé sur le net n'ont pas donné de résultats probants.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2SOAP-ERROR: Encoding: Can't decode apache map, missing key
Merci bien.
Partager