我有一个WSDL网址: http://www.persiansms.info/webservice/smsService.php?wsdl
当我尝试使用Delphi WSDL Importer生成接口时,Delphi会生成此警告:
// ************************************************************************ //
// The following types, referred to in the WSDL document are not being represented
// in this file. They are either aliases[@] of other types represented or were referred
// to but never[!] declared in the document. The types from the latter category
// typically map to predefined/known XML or Embarcadero types; however, they could also
// indicate incorrect WSDL documents that failed to declare or import a schema type.
// ************************************************************************ //
// !:int - "http://www.w3.org/2001/XMLSchema"[]
// !:ArrayOf_xsd_long - "http://www.w3.org/2001/XMLSchema"[]
// !:string - "http://www.w3.org/2001/XMLSchema"[]
// !:array - "http://www.w3.org/2001/XMLSchema"[]
那么,阵列是什么? WSDL文档从未提及它具有的类型,例如:
<part name="note" type="xsd:array"/>
我很困惑,这是delphi中的一个错误吗?或者WSDL文档是不完整的? C#程序适用于它,但我没有源代码。
那我该怎么办? 有可能找出那是什么吗?答案 0 :(得分:1)
我们可以修复此类型的问题应该替换为“Array;” :
T2dArray = WideString数组的数组;
也许它可以帮助别人。 我正在测试它,它仍然有效!
答案 1 :(得分:0)
我的旧BDS2006(德语)为生成的代码添加了注释
// ************************************************************************ //
// Die folgenden Typen, auf die im WSDL-Dokument Bezug genommen wird, sind in dieser Datei
// nicht repräsentiert. Sie sind entweder Aliase(@) anderer repräsentierter Typen oder auf sie wurde Bezug genommen,
// aber in diesem Dokument nicht deklariert (!). Die Typen aus letzterer Kategorie
// sind normalerweise mit vordefinierten/bekannten XML- oder Borland-Typen verbunden; sie könnten aber auch ein Anzeichen
// für ein falsches WSDL-Dokument sein, das einen Schema-Typ nicht deklariert oder importiert..
// ************************************************************************ //
// !:string - "http://www.w3.org/2001/XMLSchema"
// !:array - "http://www.w3.org/2001/XMLSchema"
// !:int - "http://www.w3.org/2001/XMLSchema"
// !:ArrayOf_xsd_long - "http://www.w3.org/2001/XMLSchema"
这意味着: WSDL文档中引用的以下类型未在其中表示(声明?)。它们是包含的其他类型的别名(@),但在本文档中未声明(!)。后一类的类型通常与预定义/已知的XML或Borland类型相关联,但也可以指示无效的WSDL文档,该文档不声明或导入模式类型。
对于异国情调的翻译感到抱歉。
答案 2 :(得分:0)
问题是由于WSDL RPC编码和Delphi不支持它(甚至不是XE3),如下面的wsdl摘录所示:
<binding name="sms_webserviceBinding" type="tns:sms_webservicePort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="send_sms_array">
它适用于C#客户端,因为支持RPC,如下所示:
public interface sms_webservicePort {
[System.ServiceModel.OperationContractAttribute(Action="urn:sms_webservice#sms_webservice#send_sms_array", ReplyAction="*")]
[System.ServiceModel.XmlSerializerFormatAttribute(Style=System.ServiceModel.OperationFormatStyle.Rpc, SupportFaults=true, Use=System.ServiceModel.OperationFormatUse.Encoded)]
[return: System.ServiceModel.MessageParameterAttribute(Name="send_sms_array")]
string send_sms_array(string username, string password, string sender_number, string receiver_number, string note, string ersal_flash, string onlysend, int date);
在使用NetBeans 7.x的Java中,可以获得更明确的消息:
选择的WSDL是RPC编码。您必须选择JAX-RPC客户端。