web服务- delphi中的WSDL导入问题



我有一个WSDL URL: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中的一个bug吗?还是WSDL文档不完整?一个c#程序可以很好地使用它,但是我没有源代码。

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

我们可以解决这个问题,这个类型应该被"Array;":

t2array = array;

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

我的旧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文档。

不好意思,翻译有点异域风情。

问题是由于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);

在Java中使用NetBeans 7。X得到更明确的消息:

选择的wsdl是rpc编码的。您必须选择JAX-RPC Client。

相关内容

  • 没有找到相关文章

最新更新