Delphi XE2のTSQLConnectionコンポーネントを使用してDataSnapサーバーに接続します。XE2でTSQLConnectionの接続を中止する方法はありますか?
私の問題は、3秒後に接続できない場合は接続の試行を中断したいが、ドライバのConnectTimeoutプロパティを設定しても影響はないようだ(約20秒間あきらめる前に)。
私はこれをスレッド内で実行しているので、スレッドにメッセージを投稿できます(スレッドメッセージキューがサービスされるかどうかは、このブロッキング呼び出しの作成方法によって異なります)。私のスレッドメッセージハンドラが実行されたとしても、スレッドのExecuteメソッド内で設定されているTSQLConnection.Connectedプロパティを設定する呼び出しをブロックする方法がわかりません。
私はTerminateThreadを呼びたくないのですが、これは残念だと思うので、スレッドのスタックに割り当てられたメモリを(わかっていれば)残しておきます。どのようにこの接続プロセスを中断するか、または基礎となるIndyコンポーネントにアクセスし、接続タイムアウトを明示的に設定する方法についてのアイディアは高く評価されます。
ありがとうございます!
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;
この問題は、ファイアウォールがICMPを許可する必要があるということです。この例ではlocalhostへの接続を示していますが、別のプロトコルを使用しているとは思われません。私が誤解しているかどうか知らせてください。 – Duncan