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 :

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>
que j'ai ajouté dans les wsdl:types.

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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
SOAP-ERROR: Encoding: Can't decode apache map, missing key
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.

Merci bien.