3

我有一个 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 文档不完整?AC# 程序与它配合得很好,但我没有源代码。

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

4

3 回答 3

1

我们可以用这种类型解决这个问题,应该用“Array;”替换 :

T2dArray = WideString 数组的数组;

也许它可以帮助别人。我正在测试它,它仍然有效!

于 2013-01-05T00:19:04.637 回答
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 文档。

对不起,异国情调的翻译。

于 2012-12-30T23:49:08.957 回答
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 客户端。

于 2012-12-31T16:58:33.243 回答