Erro ao comunicar com WebService Soap: does not match the HTTP SOAP Action.

26/11/2018

0

Olá a todos,
Estou tentando consumir um webService Soap. O xml retorna os valores esperados quando uso a aplicação SoapUI. Porém, no Delphi, quando passo o mesmo xml retorna o erro abaixo:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">GSEFault</a:Action>
</s:Header>
<s:Body>
<s:Fault>
<s:Code>
<s:Value>s:Sender</s:Value>
</s:Code>
<s:Reason>
<s:Text xml:lang="pt-PT">A protocol error has occurred: The SOAP action specified on the message, '''''''''''''''', does not match the HTTP SOAP Action, ''''''''HRMiniMasterInterfaceOperation''''''''. </s:Text>
</s:Reason>
</s:Fault>
</s:Body>
</s:Envelope>

Para me comunicar uso o trecho de código abaixo, onde srr é THHPReqResp, e as variáveis estão preenchidas com o mesmo valor utilizado na aplicação SoapUI. Req e Resp são TMemoryStream :

srr.URL := UrlWSDL;
srr.UseUTF8InHeader := True;
srr.UserName := UserName;
srr.Password := PassWord;
srr.soapAction := SoapAction;

srr.Receive(srr.Send(req), Resp);
resp.SaveToFile(''''''''C:\\\\\\\\\\\\\\\\Temp\\\\\\\\\\\\\\\\Retorno.xml'''''''');

Alguém já passou por isso? Tem ideia de como resolver ?
Luciano Mafra

Luciano Mafra

Responder

Posts

29/11/2018

Luciano Mafra

RESOLVIDO!
Apesar de o componente ter um atributo para informar qual é o SoapAction, ele não o inclui no header da requisição ao WebService. Assim, temos que fazer isso manualmente. Ou seja, incluir no Header do xml algo como:
<wsa:Action>NomeDaAction</wsa:Action><wsa:ReplyTo><wsa:Address>http://www.w3.org/2005/08/addressing/anonymous</wsa:Address></wsa:ReplyTo>

Espero que ajude a comunidade.
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