3

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"/>

私は混乱しています、それはデルファイのバグですか?それとも 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 ドキュメントで参照されている次の型が、WSDL ドキュメントで表現 (宣言) されていません。それらは、含まれている他のタイプのエイリアス (@) ですが、このドキュメントでは宣言されていません (!)。後者のカテゴリのタイプは、通常、定義済み/既知の XML または Borland のタイプに関連付けられていますが、スキーマ タイプを宣言またはインポートしない無効な WSDL ドキュメントを示している可能性もあります。

エキゾチックな翻訳で申し訳ありません。

于 2012-12-30T23:49:08.957 に答える
0

問題は WSDL RPC エンコーディングが原因であり、以下の wsdl の抜粋に示されているように、Delphi はそれをサポートしていません (XE3 でさえ)。

<binding name="sms_webserviceBinding" type="tns:sms_webservicePort">
  <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="send_sms_array">

以下に示すように RPC がサポートされているため、C# クライアントで動作します。

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 に答える