Erro de ESOAPHTTPException ao Consumir WebService

Delphi

21/09/2012

Boa tarde a todos,
estou tentando consumir um determinado WebService, mas esta ocorrendo o seguinte erro:

Project WebTracService.exe raised exception class ESOAPHTTPException with message 'Unable to retrieve the URL endpoint for Service/Port 'WebService'/'' from WSDL 'http://webservice04.xxxxx.com.br/service.asmx?WSDL''.

Consegui importar o WSDL normalmente. Estou fazendo o seguinte código:

procedure TForm1.btnConectaClick(Sender: TObject);
var
ARetornoConexao : Boolean;
begin
HTTPRIO1.WSDLLocation := EdtURL.Text;
ARetornoConexao := (HTTPRIO1 as WebtServiceSoap).AutenticaUsuario(EdtUsuario.Text, EdtSenha.Text);
end;

O retorno do WebService é um Boolean mesmo.
Gostaria de saber de vocês, qual seria este erro e o que necessito fazer para arrumá-lo.

Desde já agradeço pela atenção.
Paulo Fossá

Paulo Fossá

Curtidas 0

Respostas

Romulo Contro

Romulo Contro

21/09/2012

procura na classe que importou do WSDL se tem algo parecido com isso:




function GetRodocredSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): RodocredSoap;
const
defWSDL = 'http://homologacao.ws.rodocred.com.br/rodocred.asmx?WSDL';
defURL = 'http://homologacao.ws.rodocred.com.br/rodocred.asmx';
defSvc = 'Rodocred';
defPrt = 'RodocredSoap12';
var
RIO: THTTPRIO;
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 RodocredSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;


eu faço da seguinte maneira:


function Autenticar(): AutenticarClienteResponse;
var
ser : RodocredSoap;
x : AutenticarClienteResponse;
begin
ser := GetRodocredSoap(false,'',uMain.HTTPRIO1);
x := nil;
try
try
x := ser.AutenticarClienteRequest(StrToInt(uMain.EdtID.Text), uMain.EdtLogin.Text, uMain.EdtChave.Text);
except
ShowMessage('Erro ao Autenticar!');
end;
finally
Result := x;
end;
end;
GOSTEI 0
Paulo Fossá

Paulo Fossá

21/09/2012

Romulo,
muito obrigado pelo auxílio, acredito que era isso mesmo.
O problema agora é que o WebService me retorna false,
quer dizer que a aplicação pelo menos pediu autenticação.

Qualquer coisa retorno por aqui.
GOSTEI 0
Romulo Contro

Romulo Contro

21/09/2012

falou entao... qualquer coisa posta aí
GOSTEI 0
Márcio Barbiero

Márcio Barbiero

21/09/2012

procura na classe que importou do WSDL se tem algo parecido com isso:




function GetRodocredSoap(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): RodocredSoap;
const
defWSDL = 'http://homologacao.ws.rodocred.com.br/rodocred.asmx?WSDL';
defURL = 'http://homologacao.ws.rodocred.com.br/rodocred.asmx';
defSvc = 'Rodocred';
defPrt = 'RodocredSoap12';
var
RIO: THTTPRIO;
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 RodocredSoap);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := defPrt;
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;


eu faço da seguinte maneira:


function Autenticar(): AutenticarClienteResponse;
var
ser : RodocredSoap;
x : AutenticarClienteResponse;
begin
ser := GetRodocredSoap(false,'',uMain.HTTPRIO1);
x := nil;
try
try
x := ser.AutenticarClienteRequest(StrToInt(uMain.EdtID.Text), uMain.EdtLogin.Text, uMain.EdtChave.Text);
except
ShowMessage('Erro ao Autenticar!');
end;
finally
Result := x;
end;
end;


Boa tarde,

Gostei da explicação... mas quando vou digitar a linha x := ser.AutenticarClienteRequest( .... o delphi 2010 deixa em vermelho... dizendo que não acho a expressão... tem alguma ideia?
GOSTEI 0
Romulo Contro

Romulo Contro

21/09/2012

ve se existe exatamente com esse nome "AutenticarClienteRequest"... pode ser que esteja outro nome
GOSTEI 0
Vanderson Freitas

Vanderson Freitas

21/09/2012

Caro Romulo, Boa Tarde !
Olha pelo o que olhei no seu post, voce deve ter um conhecimento legal nesta parte de webservice. Então gostaria de saber se voce pode me dar uma dica nesta questão.
É o seguinte desenvolvi um WebService aqui, que se dar tudo certo depois vou disponibilizar pro pessoal, junto com o (siteminha) que estou desenvolvendo aqui faz parte do mesmo.
O problema é que em questão de performace está (ridiculo). É simples eu informo um cliente e um pedido de venda e ele por sua vez me traz esses dados na tela, calculando e mostrando as parcelas e tudo mais.

Está Funcionando perfeito, só que na mnha tela (form) na hora que eu informo o cliente e o numero do pedido (edits) ele está demorando em média de 3 a 4 minutos para trazer o resultado. Então se voce poder me ajudar com alguma dica ou algo que torne o retorno mais rapido, vou ficar imensamente agradecido,
de qualquer forma valeu pela atenção dispensada..

Obs: Estou usanod (Unidac) com Orientação a Objetos, ( Troquei pelo esquema de DBexpress e continuo a mesma coisa)

Se quiser dar uma olhada no que estou desenvolvendo pra galera aprender ou talves aprofundar os conhecimentos segue o link:

http://www.4shared.com/rar/FV_YomSf/Controle_de_Negocios01.html

Valeu !!
GOSTEI 0
Romulo Contro

Romulo Contro

21/09/2012

cara, que estranho...

eu não manjo muito de webservice não, só fiz um projeto uma vez que precisava para o meu tcc, e outro que tentei consumir o ws da rodocred.

mas faz o seguinte, tenta debugar o webservice...

quando eu fiz no meu tcc, o desempenho era ótimo, muito rapido mesmo a resposta, e tudo mais...

qual versão do delphi vc desenvolveu o WS?

dentro do proprio delphi tem um servidor aí que vc consegue disponibilizar o ws, e debugar. No delphi 7 fica no menu Tools > Web App Debugger, em outras versões nao sei.

quando eu ia testar algo, eu rodava ali por dentro do delphi mesmo o ws, e colocava breakpoints lá pra ir debugando. Acredito que você pode fazer o mesmo pra ver onde tá o gargalo aí... se é realmente no processamento dentro do webservice aí, ou se é em outro lugar. Talvez pode ser alguma consulta aí que demora muito pra executar, vai saber...

faz o teste aí e manda uma resposta...

falow!
GOSTEI 0
Márcio Barbiero

Márcio Barbiero

21/09/2012

ve se existe exatamente com esse nome "AutenticarClienteRequest"... pode ser que esteja outro nome


Encontrei e usei ser.autenticarcliente(objautenticarClienteRequest) , alimeto o objeto de request mas compila corretamente... na execução dá erro de Tbutton para Tremoteable.

Não encontrei a saida.
GOSTEI 0
POSTAR