Używanie komponentu TSQLConnection w Delphi XE2 do łączenia się z serwerem DataSnap.Jak przerwać próbę połączenia TSQLConnection w XE2?
Mój problem polega na tym, że chciałbym przerwać próbę połączenia, jeśli nie uda nam się połączyć po 3 sekundach, jednak ustawienie właściwości ConnectTimeout sterownika nie wydaje się mieć żadnego wpływu (nadal czeka około 20 sekund przed poddaniem się).
Używam tego wewnątrz wątku, więc mogę wysłać wiadomość do wątku (to, w jaki sposób kolejka komunikatów wątków jest obsługiwana, zależy, jak przypuszczam, od tego, w jaki sposób zostało wywołane wywołanie blokujące). Nawet jeśli uruchomił się mój program obsługi komunikatów wątku, nie jestem pewien, jak przerwać blokowanie wywołania, aby ustawić właściwość TSQLConnection.Connected (która jest ustawiona w metodzie Execute wątku).
Wolałbym nie wywoływać TerminateThread, ponieważ wydaje się to przesadą i zostawi (jeśli dobrze rozumiem) pamięć przydzieloną do stosu wątku. Wszelkie pomysły na przerwanie tego procesu połączenia lub dostęp do podstawowych komponentów Indy i jawne ustawienie limitu czasu połączenia zostaną docenione.
Dzięki!
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;
Problem polega na tym, że zapora będzie musiała zezwolić na ICMP. Zdaję sobie sprawę, że przykład pokazuje połączenie z localhost, ale nie sądzę, że używanie oddzielnego protokołu jest poprawką w tym przypadku. Daj mi znać, jeśli źle to zrozumiałem. – Duncan