我一直在尝试在最后一天返回一个可以被c#soap客户端反序列化的有效响应。
唯一的问题是当webservice返回一个字符串数组数组时。
C#客户端获取的错误是:
The specified type was not recognized: name='errorArray', namespace='urn:https://xxxxxxxx/index.php', at <errors xmlns=''>.
我正在使用PHP Nusoap生成WSDL。
这是注册函数(我正在跳过一些部分,因为我得到的错误只与“错误”结构有关):
$server->register(
'createEntity',
array('requests' => 'tns:inputCreateEntity'),
array(
'return' => 'tns:returnCreateEntity',
'errors' => 'tns:createEntityErrorArray'
),
'urn:'.$nameSpace,
'urn:'.$nameSpace.'#createEntity'
);
$server->wsdl->addComplexType(
'createEntityErrorArray',
'complexType',
'array',
'all',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:errorArray[]')),
'tns:errorArray'
);
$server->wsdl->addComplexType(
'errorArray',
'complexType',
'array',
'all',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'xsd:string[]')),
'xsd:string');
这是我的soap服务器返回的XML错误部分
<errors xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:errorArray[1]">
<item xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="xsd:string[2]">
<item xsi:type="xsd:string">GENERAL ERRORS :</item>
<item xsi:type="xsd:string">The request array must contain at least a valid array!</item>
</item>
</errors>