WebService com Delphi xe7

16/06/2017

0

Boa tarde pessoal, estou com o seguinte problema:

Estou usando o delphi xe 7 e usando o "Import WSDL..." para consumir um webservice e nesta parte tudo ok, estou recebendo um retorno de erro e não estou conseguindo acertar ele.

------
-- request enviado
------
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header>
<NS1:username xmlns:NS1="urn:uHomolog">teste</NS1:username>
<NS2:password xmlns:NS2="urn:uHomolog">teste</NS2:password>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<registrarTitulo xmlns="http://webservice.xxxx.com.br/">
<ClienteID xmlns="">1000</ClienteID>
<titulo xmlns="">
<Valor>1961.65</Valor>
</titulo>
</registrarTitulo>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

------
-- response devolvido, com erro no usuario e senha do header, como preencher ele corretamente?
------
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header/>
<env:Body>
<ns2:clienteResponse xmlns:ns2="http://webservice.xxxx.com.br/">
<return>
<MensagemErro>Fourbank Error: Usuario ou Senha invalido (Header)!</MensagemErro>
</return>
</ns2:clienteResponse>
</env:Body>

------
-- Header esperado:
------
<SOAP-ENV:Header>
<username>teste</username>
<password>teste</password>
</SOAP-ENV:Header>



***** Sei que estou errando eh no header, mas como posso alterar ele, pelo que entendi o delphi esta colocando como padrão do outro jeito que esta sendo rejeitado.
***** Alguém ja usou algum webservice com login e senha no header?
****** Agradeço a quem puder me ajudar.
***** estou usando THTTPRIO e TSOAPHeader
Parte delphi usada:

Responder

Posts

16/06/2017

Rod

Código que faltou.

TSimpleHeader = class(TSOAPHeader)
private
FValue: string;
published
property Value: string Index (IS_OPTN) read FValue write FValue;
end;
username = class(TSimpleHeader);
password = class(TSimpleHeader);



var
RIO: THTTPRIO;
user : username;
passw : password;
begin
Result := nil;
if (Addr = '''''''''''''''') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as CobrancaService);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;

User := username.Create;
User.Value := ''''''''teste'''''''';
RIO.SOAPHeaders.Send(User);

passw := password.Create;
passw.Value := ''''''''teste'''''''';
RIO.SOAPHeaders.Send(passw);
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
Responder

20/06/2017

Rodolpho Silva

Já testou no SOAP UI para ver se o serviço está operando normalmente?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar