Vcl form istemcisine sahip bir datasnap sunucum var. İstemciden, sunucu kapatma ve mevcut istemci bağlantılarıyla yeniden başlatıldıysa nasıl işleyebilirim? Bu senaryo, bir 10053 EIdSocketError istisnasını yükseltir.Datasnap ve SocketError
Çoğaltmak için, hem Sunucu hem de İstemci'yi çalıştırıyorum, sunucuya çağrı yapıyorum (DataSnap proxy oluşturucusuyla gösterilen yöntemleri kullanıyorum). Sonra sunucuyu kapatıyorum (örneğin uygulamayı kapatın) ve yeniden başlatın. Daha sonra sunucuya tekrar arama yapmayı deniyorum.
örn: dspPolicyGroup bir TDataSetProvider ve cdsPolicyGroup bir TClientDataSet olduğunu
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;
MÜŞTERİ çağrısı (Sadece yerel olarak "store" benim TDataSet sonucunu kullanabilirsiniz).
SUNUCU
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;
bu düzenli olarak çoğaltmak için oldukça kolay olduğunu görünce insanlar tarafından karşılaşılan düşünürdüm. EIdSocketError (ve eşdeğeri) kontrol etmek ve işlemek için her aramadan önce bir "Test Bağlantısı" araması veya ilk önce bir şey (TestConnection gibi bir yöntem) yerleştirmeli miyim? Yoksa belki de bir tasarım hatası mı?
Teşekkür