在与另一家公司合作中,我试图编写SOAP客户端来与他们的服务进行交谈。该服务本身没有wsdl文件,但我已经成功地编写了自己的继承自SoapHttpClientProtocol的代理类。只返回一个整数或单个值的基本方法不是问题,但当我尝试创建一个需要解析数组中返回的结果的方法时,我无法使其工作。问题的部分可能是,SOAP-结果引用不存在了一个命名空间,但设置反序列化C#中的SOAP数组
[SoapRpcMethodAttribute("Action", Use = SoapBindingUse.Literal)]
的方法似乎忽视了这个命名空间的问题。但是,每当我尝试将结果解析为数组时,我都会返回空结果。
[SoapRpcMethodAttribute("Action", Use = SoapBindingUse.Literal)]
[return: XmlArrayAttribute("Result")]
public ComplexType[] getArray(int customerId, int subCustomerId, int subscriptionId, int type)
{
object[] result;
result = Invoke("getArray", new object[] { id });
return ((ComplexType[])(result[0]));
}
我是否完全错误地认为上述方法应该起作用?从服务器
XML结果看起来是这样的(体内):
<getArray SOAP-ENC:root="1">
<Result SOAP-ENC:arrayType="ns1:SOAPStruct[1]" xsi:type="SOAP-ENC:Array" xmlns:ns1="http://soapinterop.org/xsd">
<item>
<id xsi:type="xsd:integer">60</id>
<name xsi:type="xsd:string">John</name>
<type xsi:type="xsd:string">1</type>
</item>
<item>
<id xsi:type="xsd:integer">99</id>
<name xsi:type="xsd:string">Jane</name>
<type xsi:type="xsd:string">1</type>
</item>
</Result>
</getArray>
而命名空间isssue是http://soapinterop.org/xsd不存在了,似乎但是这并不是主要问题。