У меня есть сервер datasnap с клиентом форм vcl. Как я могу справиться с клиентом, если сервер был выключен и перезапущен с существующими клиентскими подключениями? Этот сценарий вызывает исключение 10053 EIdSocketError.
Для репликации я запускаю и сервер, и клиент, делаю вызов серверу (. Я использую методы, открытые через генератор прокси-сервера DataSnap ), который преуспевает. Затем я выключил сервер (, например, закрыл приложение )и перезапустил его. Затем я снова пытаюсь позвонить на сервер.
например: КЛИЕНТ вызов
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 — это TDataSetProvider, а cdsPolicyGroup — это TClientDataSet (. Я просто использую его локально для «хранения» результатов TDataSet ).
СЕРВЕР
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;
Я думаю, что люди регулярно сталкиваются с этим, видя, что это довольно легко воспроизвести. Должен ли я сначала помещать вызов «Test Connection» или что-то еще (, например, метод TestConnection )перед каждым вызовом для проверки EIdSocketError (и эквивалентного )и обработки? Или это скорее конструктивный недостаток?
Спасибо