C # SOAP Аргумент сложного типа - PullRequest
0 голосов
/ 17 сентября 2010

Я работаю над SOAP-клиентом в C # и использую сервис, который я представил в PHP, используя NuSoap. Мой веб-сервис работает отлично с точки зрения потребления, но проблема, с которой я сталкиваюсь, связана с передачей сложного типа в качестве аргумента.

Работать со сложным типом, возвращаемым методом, не составит труда, но я не могу понять, как на самом деле манипулировать моим сложным типом в C #.

Если кто-то на самом деле не попросит об этом, я пока сэкономлю длинный WSDL. Но сложный тип, с которым я пытаюсь работать, это список другого сложного типа. В моем приложении на C # мне нужно добавлять и удалять элементы из списка, но я не могу понять, как это сделать.

Может ли кто-нибудь указать мне правильное направление? Более подробная информация может быть предоставлена ​​по запросу.

Ответы [ 2 ]

0 голосов
/ 17 сентября 2010

Вы не знаете, как на самом деле использовать клиент C # SOAP, сгенерированный для вас?

Примерно так должно работать ...

// 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
}

[Редактировать] Как предполагает в своем ответе Николас, в определении службы SOAP следует избегать использования имен общих типов, таких как "Список", поскольку оно будет конфликтовать с System.Collections.Generic.List<T>.

0 голосов
/ 17 сентября 2010

Итак, вот как я это прочитал:

//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

Если вы генерируете прокси в Visual Studio, есть возможность превратить массивы в строго типизированные объекты List (Добавить ссылку на службу -> Дополнительно -> Тип коллекции: System.Collections.Generic.List). Таким образом, вы можете просто вызвать commandList.Add ().

Кроме того, я не знаю, почему имя типа, возвращаемого из getCommands (), это List.

...