WIN_OLECREATEOBJECT() DUDAS

Post Reply
User avatar
rterraz
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

WIN_OLECREATEOBJECT() DUDAS

Post by rterraz »

Estimados amigos
Tengo un sistema de facturación que usa Factura Electronica a AFIP
Para establecer la comunicación con el WebService antes usabamos WIN_OLECREATEOBJECT('MSXML2.XMLHTTP') y lo cambiamos a WIN_OLECREATEOBJECT('Microsoft.XMLHTTP'),porque parece que este es mas rápido...esto es correcto ?
Esta función anda en cualquier versión de Windows ?
El principal problema que nos está preocupando es que al consultar al WS hay veces que ( creemos que por saturación del servidor) el sistema se queda esperando la respuesta del WS durante un tiempo prolongado impidiendo al usuario seguir con su proceso de facturación, es posible incluir un Timeout() que cuando esto ocurra cancele la consulta y libere el sistema , o una vez iniciada la misma la única manera de salir es esperar la respuesta del WS ?
Si alguien tiene alguna solución o sugerencia para evitar este problema agradeceria mucho me la hicieran saber.

un abrazo a todos
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: WIN_OLECREATEOBJECT() DUDAS

Post by cnavarro »

El motivo de existir ( e incluso coexistir varios "protocolos" ) a los que hacer referencia, es sencilla: tema de compatibilidad con versiones anteriores. Internamente lo que ha hecho Microsoft ha sido cambiar el espacio de nombres que utiliza en su biblioteca/librerías en las nuevas versiones.
Sin entrar en detalles: las nuevas versiones son: "MSXML2.XMLHTTP.6.0", por lo que se supone que es la recomendada a utilizar, pero si estás utilizando ordenadores con SO más antiguos, la que utilizas seguramente sea la adecuada.
En cualquier caso, te recomiendo que utilices un pequeño fragmento de código que te permita valorar si está funcionando o no, por ejemplo algo como esto en el que incluyo otros que no has mencionado:

Code: Select all | Expand


   local aOle    := { "MSXML2.ServerXMLHTTP.6.0", "MSXML2.XMLHTTP", ;  // "MSXML2.XMLHTTP.6.0" // "MSXML2.XMLHTTP.3.0"
                            "WINHTTP.WinHttpRequest.5.1", "Microsoft.XMLHTTP" }
   local oOle
   TRY
       oOle := CreateObject( aOle[ 1 ] )
   CATCH
       oOle := CreateObject( aOle[ 4 ] )
   END
 

Evidentemente es un ejemplo muy simple que habría que "complicar" estableciendo "salidas" para poder ejecutar cualquiera de los que incluyas en tu array.
En cuanto a lo que comentas del timeout, existe y es fácil de implementar

Code: Select all | Expand


            oOle:WaitForResponse( 1000 )  // 10000
 

Aunque algo así seguramente sea más adecuado

Code: Select all | Expand


   local n  := 0
.../...

    while ( oOle:ReadyState != 4 .or. n < 10 )
        oOle:waitForResponse( 1000 )
        n++
    end
 

y después seguramente valorar el resultado obtenido en

Code: Select all | Expand


   ? oOle:Status != 200
 

Espero te sirva de ayuda
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
rterraz
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

Re: WIN_OLECREATEOBJECT() DUDAS

Post by rterraz »

Hola Cristobal
Muchas gracias por tu ayuda, me ha sido muy esclarecedora...
Ya lo implementé, ahora tengo que esperar que el servidor AFIP se sature para poder ver si funciona el timeout() :D :D
No se como simular el retardo en en server !!!
Abrazo
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: WIN_OLECREATEOBJECT() DUDAS

Post by cnavarro »

Existe el metodo

Code: Select all | Expand


oOle:setTimeouts( resolveTimeout, connectTimeout, sendTimeout, receiveTimeout)
 

Pero no he tenido ocasión de probarlo.
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
Post Reply