Página 1 de 1

Limitar tiempo de espera

Publicado: Dom Abr 14, 2019 7:48 pm
por ramonzea
Estoy haciendo una conexión:
oHttp := CreateObject( "MSXML2.XMLHTTP.6.0" )
oHttp:Open( "POST", cURL, .f.)

Todo bien, pero cuando la URL está caída se queda colgada, y quiero limitar el tiempo de espera, pero no he logrado hallar la ayuda para hacer dicho límite.

Gracias de antemano.
Saludos.

Re: Limitar tiempo de espera

Publicado: Lun Abr 15, 2019 1:22 pm
por emeasoft
[Spanish by Google:]
Hola ramon

El objeto no tiene una propiedad de tiempo de espera.

Una idea es usar un DO WHILE.

P.ej.:

Código: Seleccionar todo

  // oHttp:readyState = 4 mean it is done
  nTimeout := 4 // in seconds
  nSeconds := Seconds()
  DO WHILE oHttp:readyState <> 4
    IF Seconds() - nSeconds > nTimeout
      EXIT
    ENDIF
    Sleep(1000)
  END
Fuente:
https://docs.microsoft.com/en-us/previo ... 3dvs.85%29

Espero eso ayude.

Saludos,
Juliano

Re: Limitar tiempo de espera

Publicado: Mar Abr 16, 2019 12:26 pm
por ramonzea
Gracias, si eso hice pero cuando es un webservice siempre regresa 1, y hasta hacer un SEND. pasa a 4 el readystate.

Saludos

Re: Limitar tiempo de espera

Publicado: Mié Abr 17, 2019 3:13 pm
por emeasoft
Hola ramon

Eche un vistazo al parámetro "varAsync" en la documentación del método abierto. Creo que si lo configura como falso, puede usar el "onreadystatechange" para controlar el "timeout" allí.

https://docs.microsoft.com/en-us/previo ... 3dvs.85%29

Eche un vistazo a los comentarios y al final de la página.

Saludos,
Juliano

Re: Limitar tiempo de espera

Publicado: Mar Abr 23, 2019 1:13 pm
por figo21
Buenas, que yo sepa, sí tiene un tiempo de espera:

xmlServerHttp.setTimeouts(lResolve, lConnect, lSend, lReceive);

Son en milisegundos.

Ejemplo de uso:

Código: Seleccionar todo

var xmlServerHttp = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");  
var lResolve = 5 * 1000;  
var lConnect = 5 * 1000;  
var lSend = 15 * 1000;  
var lReceive = 15 * 1000;  
xmlServerHttp.setTimeouts(lResolve, lConnect, lSend, lReceive);  
xmlServerHttp.open("GET", "http://localhost/sample.xml", false);  
xmlServerHttp.send();  

Re: Limitar tiempo de espera

Publicado: Mié Abr 24, 2019 10:06 am
por ramonzea
Gracias por sus respuestas, ya probé el SetTimeOut y marca error.
Haciendo más pruebas he detectado que en el Open, devuelte el StatusReady == 1, y donde se cuelga es en el método Send().

Sigo investigando de todos modos.

Saludos.

Re: Limitar tiempo de espera

Publicado: Jue Abr 25, 2019 8:22 am
por ramonzea
Estaba poniendo fuera de lugar el SetTimeOuts, solo que me manda error de argumentos, y he seguido los pasos de la documentación y de muchos ejemplos que he encontrado.

:SetTimeouts(300000, 300000, 30000, 30000)

:SetTimeouts(Int(nResolve), Int(nConnect), Int(nSend), Int(nReceive))

:SetTimeouts(nResolve, nConnect, nSend, InReceive)

Siempre de marca:
Error de argumento SETTIMEOUTS

Qué estoy haciendo mal?

Gracias de antemano.

Re: Limitar tiempo de espera

Publicado: Jue Abr 25, 2019 10:47 am
por figo21
Este código no da error en settimeouts:

Código: Seleccionar todo

   local oHttp
   
   oHttp := CreateObject("MSXML2.ServerXMLHTTP.6.0")
   if ValType(oHttp)<>"O"
      MsgInfo("No tenemos el objeto...")
      return nil
   endif

   // La web de la aeat donde conectamos.
   oHttp:Open("POST", "http://ec.europa.eu/taxation_customs/vies/services/checkVatService", .f.)

   // Establecer el timeout de la operación:
   // resolveTimeout, connectTimeout, sendTimeout, receiveTimeout
   // Los valores son en milisegundos:
   oHttp:setTimeouts(15000, 15000, 600000, 600000)

   // El método al que vamos a llamar.
   oHttp:SetRequestHeader("SOAPAction", "checkVatApprox")
   oHttp:Send("")
   
   MsgInfo(oHttp:responsexml:xml)
En xailer 5.0.1


Un saludo.