Tôi có một máy chủ datasnap với một máy khách dạng vcl. Từ máy khách, làm thế nào tôi có thể xử lý nếu máy chủ đã được nói tắt máy và khởi động lại với các kết nối máy khách hiện có? Kịch bản này làm tăng ngoại lệ 10053 EIdSocketError.Datasnap và SocketError
Để tái tạo, tôi chạy cả Máy chủ và Máy khách, thực hiện cuộc gọi đến máy chủ (Tôi sử dụng các phương thức được hiển thị thông qua trình tạo proxy DataSnap) để khởi động. Sau đó tôi tắt máy chủ (ví dụ Đóng ứng dụng) và khởi động lại nó. Sau đó tôi cố gọi lại máy chủ.
ví dụ: KHÁCH HÀNG gọi
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 là một TDataSetProvider và cdsPolicyGroup là một TClientDataSet (tôi chỉ sử dụng nó tại địa phương đến "cửa hàng" Kết quả TDataSet của tôi).
MÁY CHỦ
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;
tôi sẽ nghĩ rằng đây là thường xuyên gặp phải bởi những người thấy rằng nó khá dễ dàng để tái tạo. Tôi có nên đặt một cuộc gọi "Kiểm tra kết nối" hoặc một cái gì đó đầu tiên (chẳng hạn như một phương pháp TestConnection) trước mỗi cuộc gọi để kiểm tra EIdSocketError (và tương đương) và xử lý? Hay nó là một lỗ hổng thiết kế có lẽ?
Cảm ơn