In meiner Datasnap Client-Anwendung verwende ich 1 TSQLConnection für meine Methoden und ProviderConnection. Probleme treten auf, wenn die Verbindung unterbrochen wird. Sowohl TSQLConnection.Connected als auch TSQLConnection.ConnectionState fangen das nicht ein.Mannaging SQLConnection/Datasnap durch Client-Server trennt
Wenn meine TSQL-Verbindung offen ist, aber ich die Internetverbindung verliere, oder der Server stoppt. Die Datasnap Client-Anwendung gibt viele Fehler. (Server-Methoden oder ClientDatasets)
Ich habe eine Funktion zum Verwalten meiner SQL-Verbindung für meine Servermethoden erstellt. Weitere Probleme treten auf, wenn beispielsweise ein ClientDataset geschlossen wird, das über eine TDSProviderConnection verbunden ist.
F: Wie verwalten Sie Ihre Clientanwendung zum sicheren Abfangen von Verbindungsabbrüchen auf der TSQL-Verbindung. Q: Wie verwalten Sie Ausfallzeiten und was tun Sie mit dem Status nicht gespeicherter Clients?
Wiederverbindung nach Ausfall ist nicht das Problem.
Beim Aufruf einer Servermethode: Dies würde eine Ausnahme auslösen.
Also ich schreibe nächste Methode, um die TSQLCONNECTION von meinem Datamodul mit Dummy-Methode zu erhalten.
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;
Ich schrieb die Methode so, weil nur Ausweg zu finden, wenn durch Dummy-Methode Weicht Verbindung verloren geht ist die gleichen Fehler werfen würde ... dann kann ich für Reconnect oder in der Nähe Programm abfragen.
Edit: (Ich erwarte eine Art allgemeiner Antwort und Richtlinien, Empfehlungen und Einschränkungen nicht keine Korrektur meines Codes, das ist nur zu zeigen, was ich im Moment tue..)
Sie sagen "Der Benutzer kann sich erneut anmelden", aber Sie sagen nicht, wie Sie das gemacht haben? In meiner eigenen Datasnap-Anwendung löst sogar ein Aufruf von TSQLConnection1.Connected: = False eine Ausnahme aus (10053), da versucht wird, dem Server (der nicht mehr da ist) etwas mitzuteilen. Ich bin hier im Fang. Wie bist du um _that_ herumgekommen? – nolaspeaker
@nolaspeaker - Da ich weiß, dass ich mich erneut authentifizieren werde, ist mir die Ausnahme nicht wirklich wichtig. Also benutze ich 'try sqlcon.Close; außer Ende; ', die irgendwelche Ausnahmen isst. Dann kann ich mich erneut authentifizieren oder dem Benutzer den Login-Dialog erneut zeigen, damit er sich manuell einloggen kann. –
Ja, diese Handhabung ist mir auch aufgefallen - nachdem ich dir die Frage gestellt habe! :-) Danke für die Antwort. – nolaspeaker