Usando el componente TSQLConnection en Delphi XE2 para conectar a un servidor DataSnap.Cómo anular un intento de conexión TSQLConnection en XE2?
Mi problema es que me gustaría abortar el intento de conexión si no nos podemos conectar después de 3 segundos, sin embargo, configurar la propiedad ConnectTimeout del controlador no parece tener ningún impacto (todavía espera alrededor de 20 segundos) antes de rendirse).
Estoy ejecutando esto dentro de un hilo y para poder publicar un mensaje en el hilo (supongo que la forma en que se atiende la cola de mensajes de hilo depende de cómo se creó esta llamada de bloqueo). Incluso si mi controlador de mensajes de subproceso se ejecutó, no estoy seguro de cómo interrumpiría el bloqueo de la llamada para establecer la propiedad TSQLConnection.Connected (que está configurada dentro del método Execute del subproceso).
Preferiría no llamar a TerminateThread ya que esto parece excesivo y dejaría (si lo entiendo correctamente) la memoria asignada a la pila del subproceso. Cualquier idea sobre cómo interrumpir este proceso de conexión, o acceder a los componentes subyacentes de Indy y establecer explícitamente el tiempo de espera de conexión allí sería apreciado.
Gracias!
fConnection := TSQLConnection.Create(nil);
with fConnection do
begin
DriverName := 'DataSnap';
Params.Values['CommunicationProtocol'] := 'tcp/ip';
Params.Values['DatasnapContext'] := 'datasnap/';
Params.Values['HostName'] := '127.0.0.1';
Params.Values['Port'] := '211';
Params.Values['ConnectTimeout'] := '3000';
KeepConnection := true;
LoginPrompt := true;
end;
// Where it blocks for up to 20 seconds (if host unavailable)
fConnection.Connected := True;
El problema es que el firewall debería permitir ICMP. Me doy cuenta de que el ejemplo muestra una conexión con el servidor local, pero no creo que el uso de un protocolo separado sea la solución en este caso. Avísame si he entendido mal. – Duncan