delphi中的WSDL导入问题

时间:2012-12-30 21:05:54

标签: web-services delphi wsdl delphi-7 soap-client

我有一个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#程序适用于它,但我没有源代码。

那我该怎么办? 有可能找出那是什么吗?

3 个答案:

答案 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客户端。