Utilizzo del componente TSQLConnection in Delphi XE2 per connettersi a un server DataSnap.Come interrompere un tentativo di connessione TSQLConnection in XE2?
Il mio problema è che vorrei interrompere il tentativo di connessione se non siamo in grado di connettersi dopo 3 secondi, tuttavia l'impostazione della proprietà ConnectTimeout del driver non sembra avere alcun impatto (attende ancora circa 20 secondi prima di arrendersi).
Sto eseguendo questo all'interno di un thread e quindi potrei inviare un messaggio al thread (come se la coda dei messaggi di thread è gestita dipende, suppongo, da come è stata creata questa chiamata di blocco). Anche se il mio gestore di messaggi thread è in esecuzione, non sono sicuro di come interrompo il blocco della chiamata per impostare la proprietà TSQLConnection.Connected (che è impostata nel metodo Execute del thread).
Preferisco non chiamare TerminateThread in quanto sembra eccessivo e lascerebbe (se ho capito correttamente) la memoria allocata allo stack del thread. Qualsiasi idea su come interrompere questo processo di connessione, o accedere ai componenti di Indy sottostanti e impostare esplicitamente il timeout della connessione, sarebbe apprezzata.
Grazie!
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;
Il problema con questo è che il firewall dovrebbe consentire ICMP. Mi rendo conto che l'esempio mostra una connessione a localhost ma non penso che l'uso di un protocollo separato sia la soluzione in questo caso. Fammi sapere se ho frainteso. – Duncan