DELPHI: ошибка импорта WSDL

Используя Delphi 2005, я импортирую WSDL отсюда: https://certtransaction.elementexpress.com/express.asmx?wsdl

Когда я импортирую этот WSDL, одним из типов является TransactionSetup, и он импортируется неправильно. Согласно документации "TransactionSetup" должен иметь следующее:

<s:complexType name="TransactionSetup">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="TransactionSetupID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="TransactionSetupAccountID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="TransactionSetupAcceptorID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="TransactionSetupApplicationID" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="TransactionSetupApplicationName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="TransactionSetupApplicationVersion" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="TransactionSetupMethod" type="tns:TransactionSetupMethod"/>
<s:element minOccurs="1" maxOccurs="1" name="Device" type="tns:Device"/>
<s:element minOccurs="1" maxOccurs="1" name="Embedded" type="tns:BooleanType"/>
<s:element minOccurs="1" maxOccurs="1" name="CVVRequired" type="tns:BooleanType"/>
<s:element minOccurs="1" maxOccurs="1" name="AutoReturn" type="tns:BooleanType"/>
<s:element minOccurs="0" maxOccurs="1" name="CompanyName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="LogoURL" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="Tagline" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="WelcomeMessage" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ReturnURL" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ReturnURLTitle" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="OrderDetails" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ProcessTransactionTitle" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="ValidationCode" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="DeviceInputCode" type="tns:DeviceInputCode"/>
</s:sequence>
</s:complexType>

что я получаю это:

  // ************************************************************************ //
  // Namespace : https://transaction.elementexpress.com
  // ************************************************************************ //
  TransactionSetup = class(TRemotable)
  private
    Fcredentials: Credentials;
    Fapplication: Application;
    Fterminal: Terminal;
    Ftransaction: Transaction;
    FtransactionSetup: TransactionSetup;
    Faddress: Address;
    FpaymentAccount: PaymentAccount;
    FextendedParameters: ArrayOfExtendedParameters;
  public
    destructor Destroy; override;
  published
    property credentials: Credentials read Fcredentials write Fcredentials;
    property application: Application read Fapplication write Fapplication;
    property terminal: Terminal read Fterminal write Fterminal;
    property transaction: Transaction read Ftransaction write Ftransaction;
    property transactionSetup: TransactionSetup read FtransactionSetup write FtransactionSetup;
    property address: Address read Faddress write Faddress;
    property paymentAccount: PaymentAccount read FpaymentAccount write FpaymentAccount;
    property extendedParameters: ArrayOfExtendedParameters read FextendedParameters write FextendedParameters;
  end;

Одна вещь, которую я обнаружил, - это метод И тип с именем "TransactionSetup", и кажется, что импортер каким-то образом захватывает параметры метода как параметры типа. Вот импортированный метод:

  ExpressSoap = interface(IInvokable)
  ['{83D77575-DBDE-3A05-D048-60B2F6BCDFE6}']
    procedure TransactionSetup(const credentials: Credentials; const application: Application; const terminal: Terminal; const transaction: Transaction; const transactionSetup: TransactionSetup; const address: Address; const paymentAccount: PaymentAccount; const extendedParameters: ArrayOfExtendedParameters; out response: Response); stdcall;

Есть ли способ заставить импортер получать правильные параметры типа для типа TransactionSetup?

1 ответ

Я использую Delphi 7. У меня была похожая проблема. Я загрузил средство импорта обновлений WSDL и среду выполнения WebService/SOAP. Это обновление совместимо с D2007, D7, D2005 и D2006:
http://cc.embarcadero.com/Item/24535

Если вам нужно больше деталей, смотрите мой блог. На испанском языке, извините: http://www.3engine.net/wp/2010/02/invocando-un-servicio-web-wcf-desde-delphi-7

Другие вопросы по тегам