使用 Delphi 应用程序客户端、身份验证基础查询 WSDL-SOAP
Query WSDL-SOAP with Delphi app client, autentication Base
通过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 .... Soap 类 必须来自 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 所需的 "basic" 身份验证组件(HTTPRIO 和 HTTPReqResp)?
我正在寻找构建它的指南。
对于 HTTP 基本身份验证,此代码(放置在调用 SOAP 服务之前)应该有效:
HTTPRio1.HTTPWebNode.UserName := 'XXXXXXXX';
HTTPRio1.HTTPWebNode.Password := 'XXXXXXXX';
而不是事件处理程序TMainF.HTTPReqResp1BeforePost
通过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 .... Soap 类 必须来自 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 所需的 "basic" 身份验证组件(HTTPRIO 和 HTTPReqResp)? 我正在寻找构建它的指南。
对于 HTTP 基本身份验证,此代码(放置在调用 SOAP 服务之前)应该有效:
HTTPRio1.HTTPWebNode.UserName := 'XXXXXXXX';
HTTPRio1.HTTPWebNode.Password := 'XXXXXXXX';
而不是事件处理程序TMainF.HTTPReqResp1BeforePost