在與另一家公司合作中,我試圖編寫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不存在了,似乎但是這並不是主要問題。