Método Send não refaz em uma segunda chamada

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método Send não refaz em uma segunda chamada

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Método Send não refaz em uma segunda chamada

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Método Send não refaz em uma segunda chamada

Mensagem por Jairo Maia »

Olá Pessoal,

Não teria que ter algo como: oXMLDoc:Close() ou oXMLDoc:Quit()?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método Send não refaz em uma segunda chamada

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método Send não refaz em uma segunda chamada

Mensagem 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
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Método Send não refaz em uma segunda chamada

Mensagem 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.
con_cep.jpg
Compilei usando o Harbour 3.2.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Método Send não refaz em uma segunda chamada

Mensagem 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?
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método Send não refaz em uma segunda chamada

Mensagem por asimoes »

Neste caso do cep 22280001 tudo bem, pelo menos não retornou o 1º
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Método Send não refaz em uma segunda chamada

Mensagem por asimoes »

Pessoal,

Resolvi o problema:

Troquei:
oWebService:=Win_OleCreateObject("Microsoft.XMLHTTP")

Por:
oWebService:=Win_OleCreateObject("MSXML2.ServerXMLHTTP")
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder