C#SOAP复杂类型参数

时间:2010-09-16 23:29:48

标签: c# wsdl nusoap

我正在使用C#编写SOAP客户端,使用NuSoap消费我在PHP中公开的服务。从消费的角度来看,我的Web服务工作得很好,但我遇到的麻烦与传递复杂类型作为参数有关。

使用方法返回的复杂类型没有问题,但我似乎无法弄清楚如何在C#中实际操作我的复杂类型。

除非有人真正请求它,否则我将暂时放弃冗长的WSDL。但我正在尝试使用的复杂类型是另一种复杂类型的列表。我在C#应用程序中需要做的是添加和删除列表中的项目,但我似乎无法弄清楚如何。

有人能指出我正确的方向吗?可根据要求提供更多信息。

2 个答案:

答案 0 :(得分: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对象(添加服务引用 - >高级 - >集合类型:System.Collections.Generic.List)。这样你就可以调用commandList.Add()。

另外,我不知道为什么从getCommands()返回的类型的名称是List。

答案 1 :(得分: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服务定义应该避免使用常见的类型名称,例如“List”,因为它会与System.Collections.Generic.List<T>冲突。