Tengo un servidor con un cliente DataSnap formas VCL. Desde el cliente, ¿cómo puedo manejar si el servidor ha sido apagado y reiniciado con las conexiones de clientes existentes? Este escenario genera una excepción 10053 EIdSocketError.DataSnap y SocketError
Para replicar, corro hasta el servidor y el cliente, realizar una llamada al servidor (utilizo métodos expuestas a través del generador de DataSnap de proxy), que succeeeds. Luego apago el servidor (por ejemplo, cierro la aplicación) y lo reinicio. Luego intento hacer una llamada al servidor nuevamente.
por ejemplo: llamada del cliente
sm := TsvrPolicySearchClient.Create(datClientDB.SQLConnection1.DBXConnection);
try
ds := sm.SearchPolicyByPolicy(40, WCRef, '', 3);
dspPolicyGroup.DataSet := ds;
if cdsPolicyGroup.Active then
cdsPolicyGroup.Refresh
else
cdsPolicyGroup.Open;
finally
sm.Free;
end;
dspPolicyGroup es un TDataSetProvider y cdsPolicyGroup es un TClientDataSet (sólo tiene que utilizar de forma local a "almacenar" mi resultado TDataSet).
SERVIDOR
function TsvrPolicySearch.SearchPolicyByPolicy(AClientId: Integer; WCRefNum, ClientRef: string; SearchMethod: Integer): TDataSet;
begin
spPolicyByWCRef.Close;
spPolicyByWCRef.ParamByName('p_client').AsInteger := AClientId;
spPolicyByWCRef.ParamByName('p_search_method').AsInteger := SearchMethod;
spPolicyByWCRef.ParamByName('p_wc_refno').AsString := WCRefNum;
spPolicyByWCRef.Open;
Result := spPolicyByWCRef;
end;
yo creo que esto se encuentra regularmente por personas que ven que es bastante fácil de replicar. ¿Debo hacer una llamada "Prueba de conexión" o algo en primer lugar (como un método TestConnection) antes de cada llamada para comprobar si hay EIdSocketError (y equivalentes) y el mango? ¿O es más un defecto de diseño, tal vez?
Gracias