2010-09-16 5 views
0

Je travaille sur un client SOAP en C#, consommant un service que j'ai exposé en PHP en utilisant NuSoap. Mon service Web fonctionne très bien du point de vue de la consommation, mais le problème que je rencontre concerne le fait de passer un type complexe en argument.Argument de type complexe C# SOAP

Travailler avec un type complexe retourné par une méthode n'est pas un problème, mais je n'arrive pas à comprendre comment manipuler réellement mon type complexe en C#.

À moins que quelqu'un ne le demande réellement, j'éviterai le long WSDL pour l'instant. Mais le type complexe avec lequel j'essaie de travailler est une liste d'un autre type complexe. Ce que je dois faire dans mon application C# est d'ajouter et de supprimer des éléments de la liste, mais je n'arrive pas à comprendre comment.

Quelqu'un pourrait-il me diriger dans la bonne direction? Plus d'informations peuvent être fournies sur demande.

+1

Si vous avez exécuté svcutil.exe sur votre WSDL - pouvez-vous poster les wrappers pertinents qu'il a générés? – Alex

+0

En fait, vous venez de me donner un fil d'Ariane dont j'avais besoin. Laissez-moi vraiment travailler avec la sortie de cela et voir si je peux obtenir ce dont j'ai besoin. – Skudd

+0

D'accord, j'abandonne. J'ai jeté le .cs à http://pastebin.com/AxQWkitP – Skudd

Répondre

0

Alors, voici comment je l'ai lu ceci:

//instantiate proxy 

var commandList = getCommands(authToken); 

//build an array of new commands 

var commands = new [] { new Command { id = "SomeID", command = "SomeCommand" } /*, etc.*/ } }; 

//assign commands to your list 

commandList.Commands = commands; 

//do something with the commandList object 

Si vous générez le proxy dans Visual Studio, il y a une option pour activer les tableaux en objets Liste fortement typés (Ajouter un service de référence -> Avancé -> Type de collection: System.Collections.Generic.List). De cette façon, vous pouvez simplement appeler commandList.Add().

Aussi, je ne sais pas pourquoi le nom du type qui est retourné par getCommands() est List.

0

Vous ne savez pas comment utiliser réellement le client C# SOAP qui a été généré pour vous?

Quelque chose comme cela devrait fonctionner ...

// Edit an existing file command. 
using (var client = new mysiteServicePortTypeClient()) { 
    string auth = client.doAuth("user", "pass"); 
    List l = client.getCommands(auth); // get all of the Command[] arrays 
    Command file = l.files[0]; // edit the first Command in the "files" array (will crash if Length == 0, of course 
    file.command = "new command"; // since the Command is in the array, this property change will stick 
    client.submitResults(auth, l); // send back the same arrays we received, with one altered Command instance 
} 

[Modifier] Comme Nicholas infère dans sa réponse, la définition de votre service SOAP doit éviter d'utiliser des noms de type communs tels que « la liste », car il sera en conflit avec System.Collections.Generic.List<T>.

Questions connexes