Definir timeou para resquest Send()

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

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

Definir timeou para resquest Send()

Mensagem por asimoes »

SetTimeouts

Código: Selecionar todos

With Object ::oServerWS
   nResolve = 5 * 1000  
   nConnect = 5 * 1000  
   nSend    = 15 * 1000  
   nReceive = 15 * 1000  
   cSOAPAction    := "http://tempuri/RevertePagamentoLoteOP"
   :SetTimeouts( nResolve, nConnect, nSend, nReceive )
   :Open( "POST", ::cUrlWS, .F. )
   :setRequestHeader( "SOAPAction", cSOAPAction )
   :SetRequestHeader( "Content-Type", 'text/xml; charset="utf-8"' )
   :SetRequestHeader( "Content-Length", hb_NtoS( hb_BLen( cXMLSoap ) ) )
   :Send( ::oXMLDoc:xml )
   Do While :readyState != 4
      hwg_DoEvents()
      :WaitForResponse( 500 )
   Enddo
  ::cResponseText := :responseText
End

Definir timeout para resquest

https://stackoverflow.com/questions/140 ... -using-asp
►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

Definir timeou para resquest Send()

Mensagem por asimoes »

Tem que ir ajustando, aumentei nSend (SEND) para 30
O default do SetTimeouts é 120 segundos (2 min) para resposta do serviço
►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

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Sei não....

:WaitForResponse( n ) define o tempo de espera.

Definir novamente o tempo.... acho que seria tarde demais, já que o timeout já foi esgotado.

Código: Selecionar todos

      oServer:Send( ::cXmlSoap )
      oServer:WaitForResponse( ::nSoapTimeOut )
      cRetorno := oServer:ResponseBody()
A novidade seria a função com os parâmetros:

Código: Selecionar todos

setTimeouts (long resolveTimeout, long connectTimeout, long sendTimeout, long receiveTimeout)
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Estranhei esta parte:
And the point is that OP wants a 15-seconds timeout. Due to your code, operation may exceed 15 seconds. This is not an asynchronous request
...
you are right. I changed to SYNCHRONOUS, which is what the OP wants and changed the send/receive timeouts to 15 secs
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir timeou para resquest Send()

Mensagem por asimoes »

JoséQuintas escreveu::WaitForResponse( n ) define o tempo de espera.
Não funciona!

Pode colocar qq mensagem dentro desse while

Código: Selecionar todos

            :Send( ::oXMLDoc:xml )
            Do While :readyState != 4
               hwg_DoEvents()
               :WaitForResponse( 500 )
            Enddo
►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

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Tem as duas funções: SetTimeOuts() e WaitForResponse().
Me parece que uma define apenas pra resposta, e a outra define geral.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Vou testar depois, pra ver se muda alguma coisa.

Código: Selecionar todos

      //setTimeouts( long resolveTimeout, long connectTimeout, long sendTimeout, long receiveTimeout )
      //oServer:SetTimeOuts( ::nSoapTimeOut, ::nSoapTimeOut, ::nSoapTimeOut, ::nSoapTimeOut )
      oServer:Open( "POST", ::cSoapURL, .F. )
      oServer:SetRequestHeader( "Content-Type", "application/soap+xml; charset=utf-8" )
      oServer:Send( ::cXmlSoap )
      oServer:WaitForResponse( ::nSoapTimeOut )
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir timeou para resquest Send()

Mensagem por asimoes »

Quando o serviço está fora o send() espera até 2 min. para responder o WaitForResponse ignora isso
►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

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Lembrando: timeout é o LIMITE de tempo.
Se der erro antes desse tempo... não tem mais o que esperar.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

asimoes escreveu:Quando o serviço está fora o send() espera até 2 min. para responder o WaitForResponse ignora isso
Aí que está: WaitForResponse() é tempo pra esperar resposta, não para o send.
Acho que o SetTimeOuts() é mais abrangente.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir timeou para resquest Send()

Mensagem por asimoes »

SetTimeOuts define o tempo limite de resposta pata o Send se não for definido o default é 2 minutos, nunca vi o waitresponse funcionando
►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

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Tô pensando aqui....

Talvez o SetTimeOuts() defina o tempo para a função da Microsoft.
E talvez o WaitForResponse() seja o tempo do APLICATIVO esperar.
Se for assim, as duas trabalham em conjunto, cada uma definindo uma coisa.

E aí sua rotina faz sentido, porque seria o tempo do aplicativo esperar.

O que acaba deixando na dúvida sobre o que acontece com a rotina Microsoft, se ela continuar esperando mesmo depois que o aplicativo não quer mais a resposta.

O problema vai ser como testar isso, já que depende de endereço falhando.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Definir timeou para resquest Send()

Mensagem por JoséQuintas »

Atenção que o uso é em lugares diferentes, pra dar certo.
Se vai configurar o tempo de Open() e Send(), precisa ser ANTES do uso.

Código: Selecionar todos

      //setTimeouts( long resolveTimeout, long connectTimeout, long sendTimeout, long receiveTimeout )
      oServer:SetTimeOuts( ::nSoapTimeOut, ::nSoapTimeOut, ::nSoapTimeOut, ::nSoapTimeOut )
      oServer:Open( "POST", ::cSoapURL, .F. )
      oServer:Send( ::cXmlSoap )
      oServer:WaitForResponse( ::nSoapTimeOut )
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Definir timeou para resquest Send()

Mensagem por sygecom »

Em alguns lugar usei assim:
oServer:setTimeouts(1000*60, 1000*60, 0, 0) // PARAMETRO ZERO É INFINITO
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Definir timeou para resquest Send()

Mensagem por asimoes »

Parâmetro 0 vai travar a aplicação
►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