Saber si Server ADS esta en marcha

Saber si Server ADS esta en marcha

Postby thefull » Tue Dec 13, 2011 10:54 am

Buenas
Cansado de tener que liar con ADS, y tener 2 exe para lo mismo, al final, voy a poner un exe y dependiendo de un config, usar o no ADS.

He notado que el rdd de harbour es muchisimo mas rapido que el del ADS Local, por lo tanto, la idea es tener una rutina como esta;


Code: Select all  Expand view
    if empty( cServer )  // No hay servidor de ads
        rddsetdefault( 'DBFNTX' )   // Forzamos RDD por defecto de HARBOUR
      else
       if AdsIsServerLoaded( cServer ) > 0 // Encontramos servidor de ADS
          ADS( nTipo )
       else
          Alert( "PRUEBA OTRA VEZ" )
          if AdsIsServerLoaded( cServer ) > 0 // Si el primero falla, TODOS volveran a fallar.
             Alert( "Conectado" )
          endif
          Alert( "No se encuentra servidor ADS en :" +cServer )
          quit
       endif
     endif
 


Funcionar funciona, pero ... si la primera llamada a AdsIsServerLoaded() falla, porque he detenido el server, aunque vuelva a levantar el server, cuando vuelvo a llamar a AdsIsServerLoaded(), sigue
sin encontrarlo.

¿ Alguien sabe como hacerlo ? La idea es que se quede esperando hasta que el servidor este en linea de nuevo.
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Saber si Server ADS esta en marcha

Postby fgondi » Tue Dec 13, 2011 11:23 am

Rafa,

Yo la comprobación la hago intentando conectarme al server

Code: Select all  Expand view
lConnect := .F.
do while !lConnect
  if AdsConnect60( AddFile, ServerType, Usuario, Password )
    lConnect := .T.
  elseif !MsgYesNo( 'No se ha podido realizar la conexión con el diccionario de datos'+CRLF+'¿Desea volver a intentarlo?', 'Error de conexión')
    exit
  endif
enddo
 
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Saber si Server ADS esta en marcha

Postby Carles » Tue Dec 13, 2011 3:05 pm

R,


Proba

Code: Select all  Expand view

#define ADS_LOCAL_SERVER                  1
#define ADS_REMOTE_SERVER                 2
#define ADS_AIS_SERVER                    4
...

   IF ! AdsConnect( cServer , ADS_LOCAL_SERVER )
       AdsGetLastError( @cError )
       MsgAlert( cError, 'Error conectant!' )
       RETU .F.
    ENDIF


Sobre...
He notado que el rdd de harbour es muchisimo mas rapido que el del ADS Local



Es cert, pero el rdd de ADS tiene encryptacion local tambien, y es muy robusto..., nuse son gustos. El hecho de tener un RDD q simplemente cambiando un flag tienes C/S o Local yo lo encuentro una pasada de practico. :D (ya sabes, estariamos ahora hablando horas sobre el tema, jejeje)
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Saber si Server ADS esta en marcha

Postby thefull » Tue Dec 13, 2011 4:13 pm

No funciona ninguna de las 2 soluciones ;-(
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Saber si Server ADS esta en marcha

Postby fgondi » Tue Dec 13, 2011 6:37 pm

Rafa,

Es cierto. El sistema está dejando guardado en memoría que en la dirección indicada no hay un server y ya siempre contesta lo mismo.

He probado incluso a llamar a otra dirección y luego volver a llamar a la misma:
AdsConnect60( "ruta1"...)
AdsConnect60( "ruta2"...)
AdsConnect60( "ruta1"...)
Y aun así, sigue recordando que en ruta1 no hay un server.

Desconozco si existe la forma de limpiar/vaciar ese registro.

Tampoco he encontrado ningún ejemplo, de como poder hacerlo, en Internet.
Todo lo que encuentro es que si no responde a la primera finalizan directamente la aplicación.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Saber si Server ADS esta en marcha

Postby thefull » Tue Dec 13, 2011 10:47 pm

Criaturas de los dioses, que cuando pongo que no va es que he estado horas luchando como un jabato. :twisted:

De momento, lo dejo por imposible, pero , que ahí esta todo un reto.. Miré el C, pero no ví nada raro lo que hace la función.

Gracias por probar que tampoco funciona y no es cosa solo mía ;-)
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
thefull
 
Posts: 731
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona

Re: Saber si Server ADS esta en marcha

Postby fgondi » Wed Dec 14, 2011 7:57 am

Rafa,

Me imagino que no sea un problema de la función.

Las pruebas las he realizado teniendo instalado el server en otro equipo de la red, por lo que el acceso es \\192.168.1.254:2000\....
El primer intento de conexión tarda bastante, normal esta validando la dirección de red, pero a partir de ahí los sucesivos intentos son inmediatos.
Por lo que no puede está validando la dirección de red, en algún sitio ha dejado cacheado que en esa dirección no hay server.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Saber si Server ADS esta en marcha

Postby Carles » Wed Dec 14, 2011 8:25 am

R,

Ara no tinc acceso a los servidores ADS pero podrias probar la funcion AdsApplicationExit()

Code: Select all  Expand view
HB_FUNC( ADSISSERVERLOADED )
{
   UNSIGNED16 pbLoaded = 0;

   hb_retni( ISCHAR( 1 ) && AdsIsServerLoaded( ( UNSIGNED8 * ) hb_parcx( 1 ),
                                               &pbLoaded ) == AE_SUCCESS ? pbLoaded : 0 );
}


Segun la ayuda del API sirve para descargar de memoria todo...

Closes all tables and cleans up all open Advantage connections

Syntax

UNSIGNED32 AdsApplicationExit ();
Parameters

None.

Remarks

AdsApplicationExit is used to ensure the Advantage Client Engine is unloaded completely and cleanly, and that all open indexes, tables, and connections are closed. Calling this function will roll back any open transactions.

Call AdsApplicationExit when exiting an application and all function calls into the Advantage Client Engine are complete.


Seria cuestion de probar de ejecutar la funcion y volver a probar la conexion...

Ahora estoy fuera y no puedo probarlo, sorry...
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
Skype -> https://join.skype.com/cnzQg3Kr1dnk
User avatar
Carles
 
Posts: 1137
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona

Re: Saber si Server ADS esta en marcha

Postby fgondi » Wed Dec 14, 2011 8:36 am

Carles,

He probado con AdsApplicationExit, AdsDisconnect, AdsSetDefault, AdsSetSearchPath. Y no lo he conseguido con ninguna.
Un saludo
Fernando González Diez
ALSIS Sistemas Informáticos
User avatar
fgondi
 
Posts: 694
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España

Re: Saber si Server ADS esta en marcha

Postby JARO » Sun Dec 18, 2011 9:03 pm

Muy buenas la solución es la siguiente, yo lo tengo incluido en todas mis aplicaciones

local n:=AdsIsServerLoaded( 'clientes.dbf' ) //COMPROBAR CON CUALQUIER BASE DE DATOS INSTALADA EN EL SERVIDOR U OTRO EQUIPO LOCAL
If n > 0 //SERVIDOR ACTIVO
AdsSetServerType( 2 )
Else //SERVIDOR NO ACTIVO
AdsSetServerType( 1 )
EndIf
Return
SALUDOS
JARO
 
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 85 guests