delphi – Datasnap和SocketError
我有一个带有vcl表单客户端的datasnap服务器.从客户端,如果服务器已经说出关闭并使用现有客户端连接重新启动,我该如何处理?此方案引发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; 我认为人们经常会遇到这种情况很容易复制.我应该在每次调用之前先进行“测试连接”调用或其他事情(例如方法TestConnection)来检查EIdSocketError(和等效的)并处理?或者它更像是一个设计缺陷? 谢谢 解决方法
我的情景:
>客户端应用程序连接到DataSnap Server(TCP / IP,远程服务器) 解: >在客户端上我捕获异常(AppEvents.OnException) >免费并重新创建DataSnap客户端模块并初始化连接 完成此操作后,我的客户端重新连接到DataSnap服务器,并可以使用新的TCP / IP连接请求数据集.当然用户可以关闭对话框,但然后关闭应用程序. 我想这可以帮到你.我尝试了很多其他解决方案,但事实证明这是最好的.此外,算法还支持失去与客户端故障的连接. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |