Mensaje    Asunto: Archivo Firebird.conf Responder citando

Bien, Esta funcion, permite copiar un archivo de configuracion, predefinido
para abrir los puertos dentro de Gestor de Base de Datos Firebird.

como dice la ayuda, existen 2 puertos por los cuales, se conecta el servidor y el cliente de Firebird
el primero conocido por todos (algunos, ni sabian, jeje)

Es el RemotePort con un valor de puerto 3050
pero existe otro puerto, para realizar las conexiones para los eventos, este puerto se conoce como RemoteAuxPort con un valor predefinido en 0, esto indica, que el Puerto elige al azar, un puerto para notificacion de eventos, en el servidor de firebird. asi dice la ayuda, pag 41 del documento electronico Firebird v15.108.pdf (ver siguiente)

Cita:

RemoteServicePort
Valor por defecto = 3050
Estos dos parámetros proporcionan la capacidad de sobrescribir ya sea el nombre de servicio TCP/IP o
el puerto TCP/IP usado para escuchar solicitudes de conexiones de clientes de bases de datos, si uno
de ellos difiere de los valores por defecto en la instalación (gds_db/tctp 3050)
Modifique una de las dos entradas, no las dos. Primero se verifica que exista una entrada con el valor
RemoteServiceName en el archivo services. Si se encuentra, se usará el puerto indicado en el archivo
services, en caso contrario se usará el puerto RemoteServicePort con un valor por defecto de 3050.
NOTA Si se proporciona un número de puerto en la cadena de conexión TCP/IP, siempre tendrá
prioridad sobre RemoteServicePort.


RemoteAuxPort
El comportamiento heredado de Interbase, de enviar por la red mensajes de notificación de eventos a
través de puertos TCP/IP seleccionados al azar, ha sido una fuente continua de errores de red y
conflictos con firewalls, llegando al extremo de causar el cuelgue del servidor bajo ciertas condiciones.
Este parámetro le permite configurar un único puerto TCP para todo el tráfico de notificación de
eventos.
El valor por defecto (0) mantiene el comportamiento tradicional de puertos al azar. Para dedicar un
puerto específico para la notificación de eventos, configure un entero que sea un número de puerto
disponible.


bien, para realizar las conexiones de manera local rango de las IP 192.168.254.0 al 255, no existe ningun problema, pero al parece yo si lo tuve al conectarme via remota. siendo que el programa se colgaba, ahora usando esta configuracion.. es decir modificando el RemoteAuxPort, por otro puerto libre, pude conectarme y recibir los eventos de notificacion de firebird, de manera personal puedo decir, que la red, y el trafico se aceleraron, en cuanto al muestreo de registros.

para realizar esta opearcion, modifique el parametro de la siguiente manera
#RemoteAuxPort = 0 <- manera original

RemoteAuxPort = 12345 <- numero de puerto disponible

y usando esta funcion realizada por un servidor, se puede verificar, los cambios.

Código:

void __fastcall Copiar_Config_Firebird(void)
{
    TRegistry *lRegistry = new TRegistry();
    AnsiString ruta_al_fbserver;
    bool F15,F10;
    lRegistry->RootKey=HKEY_LOCAL_MACHINE;
    F15 = lRegistry->OpenKey("SOFTWARE\\Firebird Project\\Firebird Server\\Instances", false);
    F10 = lRegistry->OpenKey("SOFTWARE\\Borland\\InterBase\\CurrentVersion\\",false);
    if(F15)
    {
        ruta_al_fbserver=lRegistry->ReadString("DefaultInstance");
    }
    if(F10)
    {
        ruta_al_fbserver=lRegistry->ReadString("ServerDirectory");
    }
    //Extraemos el archivo
    TResourceStream(0, "MI_ARCHIVO_CONFIG", RT_RCDATA).SaveToFile("firebird.conf");
    //Abrimos los archivos
    HANDLE Original,Copia;
    Original = ::CreateFile((ruta_al_fbserver+"firebird.conf").c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, 0, NULL);
    Copia    = ::CreateFile("firebird.conf", GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, 0, NULL);
    // Obtenemos los tamaños
    DWORD Size1,Size2;
    Size1 = ::GetFileSize(Original,NULL);
    Size2 = ::GetFileSize(Copia,NULL);
    //Cerramos los Archivos
    ::CloseHandle(Original);
    ::CloseHandle(Copia);
    //comparamos los tamaños
     if(Size1!=Size2)
     {
        // si hay diferencia, enviamos la copia-modificada
        TResourceStream(0, "MI_ARCHIVO_CONFIG", RT_RCDATA).SaveToFile(ruta_al_fbserver+"firebird.conf");
     }

}


cabe aclarar, que despues de modificar el archivo de configuracion, lo inserte dentro del ejecutable, a la manera de _LEO, con un archivo .RC


Cita:

archivo.rc

/*configuracion, del servidor*/
MI_ARCHIVO_CONFIG RCDATA "firebird.conf"


ahora donde usar la funcion? pues sencillamente, en el momento que creas el formulario puedes poner algo como esto.

Código:
void __fastcall TForm1::FormCreate(TObject *Sender)
{

    //verificamos la configuracion
    ::Copiar_Config_Firebird();
}


Espero que les sirva de algo...

saludos.
_________________
Cool