Thread + WebService
13/06/2013
0
Veja o Seguinte código:
Código:
//Implementação do método Execute da Thread.
Código:
A maneira Acima não funciona, porque retorna o seguinte erro:
Código:
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.
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
Curtir tópico
+ 0
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
Responder
Mais Posts
13/06/2013
Hudson Leite
Rodolpho123, Obrigado!
CoInitialize(nil);
Funcionou perfeitamente.
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
Clique aqui para fazer login e interagir na Comunidade :)