Datasnap и SocketError

У меня есть сервер 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 (и эквивалентного )и обработки? Или это скорее конструктивный недостаток?

Спасибо

7
задан Jason 13 August 2012 в 05:10
поделиться