vcl forms 클라이언트가있는 datasnap 서버가 있습니다. 클라이언트에서 서버가 종료를 말하고 기존 클라이언트 연결을 다시 시작하면 어떻게 처리 할 수 있습니까? 이 시나리오에서는 10053 EIdSocketError 예외가 발생합니다.Datasnap and SocketError
복제하려면 서버와 클라이언트를 모두 실행하고 서버를 호출합니다 (DataSnap 프록시 생성기를 통해 노출 된 메소드 사용). 그런 다음 서버를 종료 (예 : 응용 프로그램 닫기)하고 다시 시작합니다. 그런 다음 서버에 다시 전화를 시도합니다.
예 : dspPolicyGroup은으로 TDataSetProvider하고 cdsPolicyGroup가 TClientDataSet의입니다
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;
CLIENT 호출 (난 그냥 로컬에 "저장"내 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;
나는이가 정기적으로 복제하는 것은 매우 쉬운 것을보고 사람들에 의해 발생 생각합니다. EIdSocketError (및 이와 동등한 것)를 확인하고 처리 할 때마다 각 호출 전에 "Test Connection"호출 또는 다른 것 (TestConnection 메서드와 같은)을 먼저 배치해야합니까? 아니면 아마도 디자인상의 결함일까요?
감사