我正在使用C#编写SOAP客户端,使用NuSoap消费我在PHP中公开的服务。从消费的角度来看,我的Web服务工作得很好,但我遇到的麻烦与传递复杂类型作为参数有关。
使用方法返回的复杂类型没有问题,但我似乎无法弄清楚如何在C#中实际操作我的复杂类型。
除非有人真正请求它,否则我将暂时放弃冗长的WSDL。但我正在尝试使用的复杂类型是另一种复杂类型的列表。我在C#应用程序中需要做的是添加和删除列表中的项目,但我似乎无法弄清楚如何。
有人能指出我正确的方向吗?可根据要求提供更多信息。
答案 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>
冲突。