Запрос WSDL-SOAP с клиентом приложения Delphi, база аутентификации - PullRequest
0 голосов
/ 28 января 2019

Через 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;

Я не знаю, какзаставить эти компоненты работать.

Я пробовал разные способы безрезультатно.Нужно ли использовать «базовые» компоненты аутентификации (HTTPRIO и HTTPReqResp), требуемые WS?Я ищу руководство, чтобы построить это.

1 Ответ

0 голосов
/ 29 января 2019

Для базовой аутентификации HTTP этот код (помещаемый перед вызовом службы SOAP) должен работать:

HTTPRio1.HTTPWebNode.UserName := 'XXXXXXXX';
HTTPRio1.HTTPWebNode.Password := 'XXXXXXXX';

вместо обработчика события TMainF.HTTPReqResp1BeforePost

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...