VS2010里的一个C#项目,引用外部的一个web services,不知道什么系统建的,其中有一个方法,返回的数据类型是string[][] 二维字符串数组,用soapUI引用 这个web services,调用返回都正常。
看一下wsdl的一部分:
<complexType name="ArrayOfArrayOf_xsd_string">
- <complexContent>
- <restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[][]" /> <-- string[][] 类型在这,是返回的数据类型
</restriction>
</complexContent>
</complexType>
<element name="ArrayOfArrayOf_xsd_string" nillable="true" type="impl:ArrayOfArrayOf_xsd_string" />
<element name="string" nillable="true" type="xsd:string" />
<element name="getPageInfoReturn" type="xsd:int" />
soapUI调用返回正常的结果:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<soapenv:Body soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<p983:getPublicInterfaceResponse xmlns:p983="http://publicinterface.services.cbos2.nbport.com">
<getPublicInterfaceReturn xsi:type="soapenc:Array" soapenc:arrayType="xsd:string[3,4]"> <-- 这里显示返回的结果是string[][] 类型
<item xsi:type="xsd:string">OPERATE_TYPE</item>
<item xsi:type="xsd:string">OPERATE_TYPE_NAME</item>
<item xsi:type="xsd:string">CUSTOMER_TYPE</item>
<item xsi:type="xsd:string">DOWNLOAD_TIMESTAMP</item>
<item xsi:type="xsd:string">1</item>
<item xsi:type="xsd:string">作业方式1</item>
<item xsi:type="xsd:string">S</item>
<item xsi:type="xsd:string">20150713124123</item>
<item xsi:type="xsd:string">2</item>
<item xsi:type="xsd:string">作业方式2</item>
<item xsi:type="xsd:string">S</item>
<item xsi:type="xsd:string">20150713124123</item>
</getPublicInterfaceReturn>
</p983:getPublicInterfaceResponse>
</soapenv:Body>
</soapenv:Envelope>
但是在C#项目里引用web services,引用也正常,能生成本地代理类,但是生成的代理类的返回结果是string[]类型:
public string[] getPublicInterface(string userid, string pwd, string interfaceType, string filter1, string filter2, string filter3, string filter4)
代码中执行这个方法,结果是出错:
Error in deserializing body of reply message for operation 'getPublicInterface'.
更detail的错误信息:
{"SOAP-ENC:arrayType with multidimensional array found at <getPublicInterfaceReturn xmlns=''>. Only single-dimensional arrays are supported. Consider using an array of arrays instead.\r\nParameter name: value"}
各位,dotnet的项目怎么引用返回数据类型为string[][]的web services?
------解决思路----------------------
string[][]和string[,]不是同一个类型
string[][]是锯齿数组
string[,]是矩阵
------解决思路----------------------
string[,]是一个标准的二维数组,是矩阵
而string[][]是一维数组里面又包含了一维数组
------解决思路----------------------
这个必须修改服务端吧。因为你的异常已经提示的非常清楚了。
看看这个链接:http://www.360doc.com/content/12/1217/10/1472642_254523537.shtml
------解决思路----------------------
实在不行,你就post报文,然后自己解析xml吧……
反正你也知道是锯齿二维数组了