Saber si Server ADS esta en marcha

Post Reply
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Saber si Server ADS esta en marcha

Post by thefull »

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

     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
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Re: Saber si Server ADS esta en marcha

Post by fgondi »

Rafa,

Yo la comprobación la hago intentando conectarme al server

Code: Select all

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 GHE Sistemas Informáticos
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: Saber si Server ADS esta en marcha

Post by Carles »

R,


Proba

Code: Select all

 
#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..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Saber si Server ADS esta en marcha

Post by thefull »

No funciona ninguna de las 2 soluciones ;-(
Saludos
Rafa Carmona ( rafa.thefullARROBAgmail.com___quitalineas__)
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Re: Saber si Server ADS esta en marcha

Post by fgondi »

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 GHE Sistemas Informáticos
User avatar
thefull
Posts: 720
Joined: Fri Oct 07, 2005 7:42 am
Location: Barcelona
Contact:

Re: Saber si Server ADS esta en marcha

Post by thefull »

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
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Re: Saber si Server ADS esta en marcha

Post by fgondi »

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 GHE Sistemas Informáticos
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Re: Saber si Server ADS esta en marcha

Post by Carles »

R,

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

Code: Select all

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..."

https://modharbour.app
https://modharbour.app/compass
https://forum.modharbour.app
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Re: Saber si Server ADS esta en marcha

Post by fgondi »

Carles,

He probado con AdsApplicationExit, AdsDisconnect, AdsSetDefault, AdsSetSearchPath. Y no lo he conseguido con ninguna.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
JARO
Posts: 30
Joined: Thu Oct 25, 2007 7:54 pm

Re: Saber si Server ADS esta en marcha

Post by JARO »

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
Post Reply