使用Delphi应用程序客户端,自动化基础查询WSDL-SOAP

时间:2019-01-28 11:16:04

标签: delphi soap wsdl

通过delphi,我正在使客户端与ws通信。

WSDL:

  visualizzaErogatoPT = interface(IInvokable)
  ['{AD9DB9DE-E3E4-1FD0-171D-FD78913E0E54}']
    function  visualizzaErogato(const VisualizzaErogatoRichiesta: VisualizzaErogatoRichiesta): VisualizzaErogatoRicevuta; stdcall;
  end;

function GetvisualizzaErogatoPT(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): visualizzaErogatoPT;

  VisualizzaErogatoRichiesta = class(TRemotable)
  private
    FpinCode: stringType;
    FcodiceRegioneErogatore: stringType;
    FcodiceAslErogatore: stringType;
    FcodiceSsaErogatore: stringType;
    Fpwd: pwdType;
    Fnre: nreType;
    FcfAssistito: stringType;
    FcfAssistito_Specified: boolean;
    FtipoOperazione: tipoOperazioneType;
    procedure SetcfAssistito(Index: Integer; const AstringType: stringType);
    function  cfAssistito_Specified(Index: Integer): boolean;
  public
    constructor Create; override;
  published
    property pinCode:                stringType          read FpinCode write FpinCode;
    property codiceRegioneErogatore: stringType          read FcodiceRegioneErogatore write FcodiceRegioneErogatore;
    property codiceAslErogatore:     stringType          read FcodiceAslErogatore write FcodiceAslErogatore;
    property codiceSsaErogatore:     stringType          read FcodiceSsaErogatore write FcodiceSsaErogatore;
    property pwd:                    pwdType             read Fpwd write Fpwd;
    property nre:                    nreType             read Fnre write Fnre;
    property cfAssistito:            stringType          Index (IS_OPTN) read FcfAssistito write SetcfAssistito stored cfAssistito_Specified;
    property tipoOperazione:         tipoOperazioneType  read FtipoOperazione write FtipoOperazione;
  end;

procedure TMainF.Button2Click(Sender: TObject);
var
  richiesta: VisualizzaErogatoRichiesta;
  ricevuta: VisualizzaErogatoRicevuta;
begin
  richiesta.codiceRegioneErogatore := '190';
  richiesta.codiceAslErogatore := '201';
  richiesta.codiceSsaErogatore := '888888';
  richiesta.pwd := '';
  richiesta.nre := '1900A4005026299';
  richiesta.tipoOperazione := '1';
  try
    ricevuta :=  (HTTPRIO1 as visualizzaErogatoPT).visualizzaErogato(richiesta); 
    label1.Caption := ricevuta.nre;
  except
    on E: Exception do
      showmessage(E.Message);
  end;
end;

我得到一个错误。(EsoapDomConvertError...。肥皂类必须从Tremotable中插入)


对于身份验证,我使用了以下组件: HTTPRIO和HTTPReqResp

procedure TMainF.HTTPReqResp1BeforePost(const HTTPReqResp: THTTPReqResp;
  Data: Pointer);
var
  auth: String;
  FUserName, FPassword : string;
begin
  FUserName:='XXXXXXXX';
  FPassword:='XXXXXXXX';
  auth := 'Authorization: Basic ' + TNetEncoding.Base64.Encode(FUserName + ':' + FPassword);
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
end;

我不知道如何使这些组件正常工作。

我尝试了各种方法,但没有结果。 我是否必须使用WS所需的“基本”身份验证组件(HTTPRIO和HTTPReqResp)? 我正在寻找构建它的指南。

1 个答案:

答案 0 :(得分:1)

对于HTTP基本身份验证,此代码(放置在调用SOAP服务之前)应该可以工作:

ts.resample('B').ffill() 

ts.resample('B').ffill()
Out[17]: 
2018-01-03    1.0
2018-01-04    1.0
2018-01-05    1.0
2018-01-08    1.0
2018-01-09    1.0
2018-01-10    2.0
2018-01-11    2.0
2018-01-12    2.0
2018-01-15    2.0
2018-01-16    2.0
2018-01-17    3.0
2018-01-18    3.0
2018-01-19    3.0
2018-01-22    3.0
2018-01-23    3.0
2018-01-24    NaN
Freq: B, dtype: float64

代替事件处理程序HTTPRio1.HTTPWebNode.UserName := 'XXXXXXXX'; HTTPRio1.HTTPWebNode.Password := 'XXXXXXXX';