2010-09-16 3 views
0

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

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

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

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

+1

Если вы запустили svcutil.exe на WSDL - можете ли вы разместить соответствующие обертки, которые он сгенерировал? – Alex

+0

Ты на самом деле просто дал мне сухарик, я думаю, что мне нужно. Позвольте мне фактически работать с выходом этого и посмотреть, могу ли я получить то, что мне нужно. – Skudd

+0

Хорошо, я сдаюсь. Я сбросил .cs по адресу http://pastebin.com/AxQWkitP – Skudd

ответ

0

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

//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 (Add Service Reference -> Advanced -> Тип коллекции: System.Collections.Generic.List). Таким образом вы можете просто вызвать commandList.Add().

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

0

Вы не знаете, как на самом деле использовать клиент 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>.

Смежные вопросы