私の Datasnap クライアント アプリケーションでは、メソッドと ProviderConnection に 1 つの TSQLConnection を使用しています。
接続が失われると問題が発生します。TSQLConnection.Connected と TSQLConnection.ConnectionState の両方がこれをキャッチしません。
TSQL 接続が開いていても、インターネット接続が失われたり、サーバーが停止したりすると、Datasnap クライアント アプリケーションで多くのエラーが発生します。(サーバー メソッドまたは ClientDatasets)
サーバー メソッドの SQL 接続を管理する関数を作成しました。ただし、たとえば、TDSProviderConnection を介して接続されている ClientDataset を閉じると、さらに問題が発生します。
Q:クライアント アプリケーションを管理して、TSQL 接続の切断を安全にキャッチするにはどうすればよいですか。
Q : ダウンタイムをどのように管理していますか? また、保存されていないクライアントの状態をどのように処理していますか?
ダウンタイム後の再接続は問題ありません。
サーバーメソッドを呼び出す場合: これは例外をスローします。
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
そこで、ダミー メソッドを使用してデータ モジュールから TSQLCONNECTION を取得する次のメソッドを作成しました。
function TDMForm.DSConnection: TSQLConnection;
var
tmpM:TServerMethodsClient;
begin
result:=nil;
if assigned(MYTSQLCONNECTION) then begin
tmpM:=TServerMethodsClient.Create(MYTSQLCONNECTION.dbxconnection,true);
try
try
tmpM.Ping;
result:=MYTSQLCONNECTION
except
ReconnectForm.ShowModal; // has a reconnect button that tries to reconnect + shutdownbutton
if ReconnectForm.modalresult=mrOK then
result:=MYTSQLCONNECTION
else
MainForm.Close;
end;
finally
tmpm.Free;
end;
end;
end;
接続が失われたかどうかを確認する唯一の方法は、同じエラーをスローするダミーメソッドを使用することであるため、この方法でメソッドを作成しました...その後、再接続を照会したり、プログラムを閉じたりできます。
編集:ある種の一般的な回答とガイドラインを期待しています。すべきこととすべきでないこと。私のコードの修正ではありません。これは、私が現在行っていることを示すためのものです。