Erreur lors de la consommation d’un service Web SOAP RPC / Encodé dans .NET

Je reçois le message d’erreur suivant lors de l’appel d’une méthode de service Web.

Impossible d’affecter un object de type System.Xml.XmlNode [] à un object de type System.Ssortingng.

Le service Web est un service PHP. J’ai créé ma classe proxy à l’aide de wsdl.exe à partir du document wsdl défini ici – http://webservice.intelecast.com.au/traffic/PublicSoap/server.php?wsdl

Vous trouverez ci-dessous la méthode du client proxy que j’appelle.

[System.Web.Services.Protocols.SoapRpcMethodAtsortingbute("http://webservice.intelecast.com.au/traffic/PublicSoap/server.php#getAllTraffic", RequestNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php", ResponseNamespace="http://webservice.intelecast.com.au/traffic/PublicSoap/server.php")] [return: System.Xml.Serialization.SoapElementAtsortingbute("return")] public TmcInfo[] getAllTmcTraffic(ssortingng[] States, int[] EventCodes) { object[] results = this.Invoke("getAllTmcTraffic", new object[] { //Error here States, EventCodes}); 

Il semble que la classe proxy ne traite pas les types / tableaux complexes définis dans le fichier wsdl … Je ne sais pas comment procéder si je ne peux trouver aucune solution sur le Web.

Vous trouverez ci-dessous la réponse SOAP que je reçois. Tout cela semble valide.

       1245632068110 22/06/2009 10:54:28 0 1 31593 4 56 0 0 0 0 0 0 0 0 802  21/06/2009 14:00:00 05/11/2009 14:00:00 Australia/Brisbane   -27.3112692120521 153.029100894928    Bracken Ridge Rd CROSS   
Bracken Ridge Rd Bracken Ridge QLD
1245632111995 22/06/2009 10:55:11 1 1 31592 4 56 0 0 0 0 0 0 0 0 802 21/06/2009 14:00:00 05/11/2009 14:00:00 Australia/Brisbane -27.3125370752656 153.042898178101 Bracken Ridge Rd CROSS
Bracken Ridge Rd Bracken Ridge QLD

Est-ce un bogue dans wsdl.exe? J’ai quelques rencontres désagréables avec wsdl.exe . Voici les problèmes décrits dans mon post:

Le premier problème, il ne parvient pas à gérer la séquence avec élément complexe. On pourrait penser que dans l’environnement de service Web actuel, une séquence d’éléments complexes est une norme. Mais apparemment, Microsoft ne le pense pas, ce qui a pour conséquence l’incapacité de wsdl.exe de gérer une séquence d’éléments complexes.

Que faire si vous insistez sur l’utilisation de wsdl.exe pour générer une classe de proxy pour un élément avec une séquence de types complexes? Vous obtiendrez une exception cryptique: impossible d’importer la liaison * depuis l’espace de noms * – impossible d’importer l’opération * – le type de données * est manquant Le deuxième bogue de wsdl est qu’il n’est pas permis d’avoir deux méthodes Web qui ont la même signature de retour. Oui, si une méthode retourne un type ComplexType, les autres méthodes doivent avoir un type de retour différent. Sinon, une exception System.InvalidOperationException sera créée: L’élément XML * from namespace * fait référence à une méthode et à une exception de type.

Notez que dans les deux cas, les messages sont cryptés. Vous ne saurez pas réellement ce qui se passe derrière le capot. Et c’est le plus frustrant de tous. Vous ne savez pas si vous échouez parce que l’outil est moche ou parce que vous ne faites pas les choses correctement.

Peut-être que vous pouvez vous référer à ce post pour une alternative à wsdl.exe.

Il convient de noter que l’implémentation SOAP rpc / encodée pose des problèmes pour les types complexes. Une solution à ce problème consiste à convertir le WSDL au format Document / Literal.