Thread + WebService

13/06/2013

0

Veja o Seguinte código:

Código:
 TCarregaDados = Class(TThread) 
     protected 
         procedure Execute;Override; 
     private 
          FdadosEmp: WebServiceType; 
          procedure msgAlerta; 
          procedure SetdadosEmp(const Value: WebServiceType 
     public 
         property dadosEmp  : WebServiceType read FdadosEmp write SetdadosEmp; 
         constructor create; 
  End; 


//Implementação do método Execute da Thread.

Código:
procedure  TCarregaDados.Execute; 
   var HTTPRIOX: THTTPRIO; 
       retorno : String; 
begin 
  inherited; 
   Priority := tpNormal; 

    HTTPRIOX := THTTPRIO.Create(nil); 
   HTTPRIOX.URL := 'http://www.empteste.com.br/ws/srvWebService.php'; 
   HTTPRIOX.WSDLLocation := 'http://www.empteste.com.br/ws/srvWebService.php?wsdl'; 
   HTTPRIOX.Service := 'WebServiceempteste'; 
   HTTPRIOX.Port := 'WebServiceemptestePort'; 

    //dadosEmp     := GetWebServicePortType(true,'',HTTPRIOX); 
    //retorno          := dadosEmp.getDadosEmpresaAcesso('7512345',0,'51fas3df5asdf'); 
     retorno           := (HTTPRIOX as WebServiceIntelectoPortType).getDadosEmpresaAcesso('7512345',0,'51fas3df5asdf'); 
end; 


A maneira Acima não funciona, porque retorna o seguinte erro:

Código:
raised exception class DOMException with message 'Microsoft MSXML is not installed' 


Entretando mesmo código dentro de uma evento de button, ou uma procedure invocada pela [ Synchronize ] da Thread funciona perfeitamente.

Gostaria de entender o motivo do erro mencionado acima.
Não consigo entender o porque ocorre o erro somente quando a função do webService é invocada dentro do execute da thread, pois quando a mesma função é chamada em outro lugar funciona perfeitamente. Agradeço.
Hudson Leite

Hudson Leite

Responder

Post mais votado

13/06/2013

Vê se isso vai funcionar....

unit ActiveX
...

try
  CoInitialize(nil);

  Priority := tpNormal; 
  HTTPRIOX := THTTPRIO.Create(nil); 
  .....

Finally
  CoUninitialize;
end;

Rodolpho Silva

Rodolpho Silva
Responder

Mais Posts

13/06/2013

Hudson Leite

Rodolpho123, Obrigado!

CoInitialize(nil);

Funcionou perfeitamente.

Responder

13/06/2013

Rodolpho Silva

Esse problema acontece porque nas execuções em threads onde alguma rotina usa algum tipo de controle ActiveX (no webservice, o XMLDocument usa o MSXML da Microsoft para fazer o parser do XML) os objetos COM não são explicitamente inicializados.
Responder

16/08/2013

Hudson Leite

Post Concluído!
Responder

29/08/2013

Hudson Leite

CONCLUÍDO
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