我正在使用 Delphi 2007。
使用 WSDL 导入器,我从外部 WSDL 创建了一个包含多个功能的单元。
不幸的是,它不包含返回的 XML 的显式结果类型。
Fi 函数 getHash('login', 'password') 返回以下 XML:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="...........>
<SOAP-ENV:Body>
<ns1:getHashResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">code</key>
<value xsi:type="xsd:string">1004</value>
</item>
<item>
<key xsi:type="xsd:string">error</key>
<value xsi:type="xsd:string">Login was not successfull</value>
</item>
</return>
</ns1:getHashResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
从这里我一直在尝试定义正确的类。到目前为止,我想出的是:
TKeyValue = class;
TArrayofKeyValue = array of TKeyValue;
TKeyValue = class(TRemotable)
private
FKey: String;
FValue: String;
published
property Key: String read FKey write FKey;
property Value: String read FValue write FValue;
end;
function getHash(const uid: WideString; const pwd: WideString): TArrayOfKeyValue; stdcall;
当我使用此代码进行测试时,我确实得到了两个 TKeyValue 实例。但它们都是空的。我的班级定义有什么问题?还是我走错了路?
最好是更好的 WSDL,但这不取决于我。