2012-08-29 13 views
5

DataSnap sunucusuna bağlanmak için Delphi XE2'deki TSQLConnection bileşenini kullanın.XE2'de TSQLConnection bağlantı denemesi nasıl iptal edilir?

Sorunum, 3 saniye sonra bağlanamayacak olursak bağlantı denemesini iptal etmek istediğimdi, ancak sürücünün ConnectTimeout özelliğinin herhangi bir etkisinin olmadığı görünmüyor (yine de yaklaşık 20 saniye bekler) vazgeçmeden önce).

Bunu bir iş parçacığı içinde çalıştırıyorum ve iş parçacığına bir ileti gönderebilmem için (iş parçacığı ileti sırasının nasıl sunulduğuna bakılmaksızın, bu engelleme çağrısının nasıl oluşturulduğuna bağlıdır). İleti ileti işleyicim çalışsa bile, TSQLConnection.Connected özelliğini (iş parçacığının Execute yöntemi içinde ayarlanmış) ayarlamak için çağrıyı engellemeyi nasıl keseceğime emin değilim.

TerminateThread'i istemediğimden, bu fazlalık gibi görünüyor ve iş parçacığı kümesine ayrılan belleği (doğru anladıysam) bırakırdım. Bu bağlantı işleminin nasıl kesileceği veya temel Indy bileşenlerine nasıl erişileceği ve açıkça bağlantı zaman aşımına nasıl ayarlanacağı ile ilgili herhangi bir fikir takdir edilecektir.

Teşekkürler!

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; 

cevap

1

Bu düşünmek ve ConnectTimeout sonra işe eğer başka bir şekilde bu çözebilir

ilk önce bu localhost değilse (örn Indy bileşeni tarafından ping dest ana bilgisayara denemek bağlamak; -)) veya daha iyisi telnet servis portunu deneyin (Indy ile de) - sanırım bu,

+0

iş parçacığını öldürmeden şimdi ne yapabileceğinizi düşünün. Buradaki sorun, güvenlik duvarının ICMP'ye izin vermesi gerektiğidir. Örnekte localhost ile bağlantı olduğunu anlıyorum ama ayrı bir protokol kullanmayı düşünmüyorum. Yanlış anlamış olursam haber ver. – Duncan

İlgili konular