Página 1 de 1
Método Send não refaz em uma segunda chamada
Enviado: 10 Nov 2015 21:19
por asimoes
Pessoal,
Eu estou com um problema no consumo de um webservice onde o método quando chamado pela primeira vez funciona ok, quando é chamado uma segunda vez os dados do xml retornado são os mesmos da primeira chamada. Saindo da aplicação e retornando a chamada do webservice funciona. A impressão que dá é que mesmo atribuindo nil a variável oWebService ela não está finanlizando o objeto.
Fiz um for..next para testar de 1 a 2 no primeiro o send demora, o que é esperado, na segunda vez passa batido e o retorno do xml é o mesmo do primeiro.
Código: Selecionar todos
oWebService := Win_OleCreateObject("Microsoft.XMLHTTP")
oXMLDoc := Win_OleCreateObject("Microsoft.XMLDOM")
oXMLDoc:async := .f.
oWebService:Open( "GET", cUrl ,.f. )
oWebService:Send()
cBuffer := oWebService:responseXML
lSucesso := oXMLDoc:load( cBuffer )
oWebService:=Nil
oXMLDoc:=Nil
Método Send não refaz em uma segunda chamada
Enviado: 10 Nov 2015 22:40
por JoséQuintas
Aqui uso normalmente isso, sem problemas.
Por acaso conferiu o conteúdo de cUrl ou das variáveis envolvidas?
Só comentário:
No Harbour não precisa do NIL, isso era coisa do Visual Basic.
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 05:18
por Jairo Maia
Olá Pessoal,
Não teria que ter algo como: oXMLDoc:Close() ou oXMLDoc:Quit()?
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 07:46
por asimoes
Obrigado, Quintas e Jairo pelas respostas,
Quintas a Url está correta, porque traz o xml com o conteúdo esperado, esse xml é um resultado de uma atualização em um banco oracle onde linhas de um campo de uma tabela são marcados com X e neste xml a rotina conta quantos X foram gravados neste campo. Acontece que na pirmeira vez por exemplo o campo com X totaliza 5, sem sair da aplicação e atualizando a tabela no oracle para trazer 3 linhas com X, a aplicação continua trazendo os 5 da primeira vez. Saindo da aplicação e executando novamente traz os 3 esperados.
Jairo os métodos Close() e Quit() não existem XMLDOM
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 08:10
por asimoes
Pessoal,
Este exemplo mostra o que está acontecendo, na segunda passagem no for..next está trazendo o resultado do primeiro cep
Código: Selecionar todos
aCep:={"20735050","22280001"}
For j:=1 to 2
oWebService:=Win_OleCreateObject("Microsoft.XMLHTTP")
oXMLDoc :=Win_OleCreateObject("Microsoft.XMLDOM")
oXMLDoc:async := .f.
cCep:=aCep[j]
oWebService:Open("GET", "http://cep.republicavirtual.com.br/web_cep.php?cep='" + cCep + "'&formato=xml", .f.)
oWebService:Send()
cBuffer := oWebService:responseXml
lSuccess:=oXMLDoc:load( cBuffer )
If lSuccess
// Cria objeto principal
oRetorno:=oXMLDoc:getElementsByTagName( "webservicecep" )
// Leitura do nó
For I:=1 TO oRetorno:length
? oXMLDoc:getElementsByTagName( "resultado" ):item(i-1):Text
? oXMLDoc:getElementsByTagName( "resultado_txt" ):item(i-1):Text
? oXMLDoc:getElementsByTagName( "uf" ):item(i-1):Text
? oXMLDoc:getElementsByTagName( "cidade" ):item(i-1):Text
? oXMLDoc:getElementsByTagName( "bairro" ):item(i-1):Text
? oXMLDoc:getElementsByTagName( "tipo_logradouro" ):item(i-1):Text
? oXMLDoc:getElementsByTagName( "logradouro" ):item(i-1):Text
InkeyGui(0)
Next i
Endif
oWebService:=Nil
oXMLDoc:=Nil
Next j
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 09:02
por Toledo
Alexandre, aqui eu compilei este seu exemplo, mudando apenas os CEPs (o seu segundo CEP não encontrava) e tirei a função InkeyGui(0), ai ficou sem parada, consultando o outro CEP logo em seguida, e funcionou sem problemas.
Compilei usando o Harbour 3.2.
Abraços,
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 10:13
por Jairo Maia
Alexandre, também tive o mesmo resultado que o Toledo, porém, alterando o 2o. CEP. Em seu exemplo, o CEP 22280001 não retorna dados nem mesmo na consulta dos correios. Tem certeza que é um CEP válido?
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 14:27
por asimoes
Neste caso do cep 22280001 tudo bem, pelo menos não retornou o 1º
Método Send não refaz em uma segunda chamada
Enviado: 11 Nov 2015 18:07
por asimoes
Pessoal,
Resolvi o problema:
Troquei:
oWebService:=Win_OleCreateObject("Microsoft.XMLHTTP")
Por:
oWebService:=Win_OleCreateObject("MSXML2.ServerXMLHTTP")