我有一個帶有vcl表單客戶端的datasnap服務器。從客戶端,如果服務器已經關閉並重新啓動現有的客戶端連接,我該如何處理?這種情況引發了一個10053 EIdSocketError異常。Datasnap和SocketError
要複製,我運行服務器和客戶端,調用服務器(我使用通過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;
我認爲這是定期,人們看不出這是很容易複製遇到。我應該在每次調用EIdSocketError(及其等價物)之前先調用「Test Connection」調用或其他方法(如方法TestConnection)並處理?或者更多的是設計缺陷?
感謝