首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Datasnap和SocketError

Datasnap和SocketError
EN

Stack Overflow用户
提问于 2012-08-13 05:10:41
回答 2查看 2.6K关注 0票数 7

我有一个带有vcl窗体客户端的数据vcl服务器。从客户端,如果服务器已经关闭并使用现有的客户端连接重新启动,我如何处理?此场景引发10053 EIdSocketError异常。

为了进行复制,我运行服务器和客户端,调用服务器(我使用通过DataSnap代理生成器公开的方法)。然后我关闭服务器(例如关闭应用程序)并重新启动它。然后,我尝试再次调用服务器。

客户端调用

代码语言:javascript
复制
    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结果)。

服务器

代码语言:javascript
复制
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”调用或其他东西(例如方法TestConnection)来检查EIdSocketError (和等效的)和句柄?或者更多的是一个设计缺陷?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2014-04-28 21:16:24

我的场景:

  • 客户端应用程序连接到DataSnap服务器(TCP/IP,远程服务器)
  • 客户端请求DataSet (使用DataSnap服务器方法)。TClientDataSet
  • 客户下载数据集
  • 服务器关机(任务终止,关闭应用程序不重要)
  • 客户端请求针对DataSet (ehhrrr套接字错误)

解决方案:

  • 在客户端,我捕获异常(AppEvents.OnException)
  • 从连接到DataSnap服务器时确认这是套接字错误
  • 我用连接丢失的信息显示对话框窗口。用户可以单击“重试”-如果是,
    • 释放并重新创建DataSnap客户端模块并初始化连接
    • 如果应用程序捕获整个进程从一开始就工作,请尝试请求dataset (用于连接测试的特殊数据集)。

在此操作之后,我的客户端重新连接到DataSnap服务器,并可以使用新的TCP/IP连接请求数据集。当然,用户可以关闭对话框,但是应用程序被关闭了。

我觉得这能帮到你。我尝试了许多其他的解决方案,但事实证明,这是最好的。此外,算法还支持与客户端的错误失去连接。

票数 2
EN

Stack Overflow用户

发布于 2013-07-22 16:17:13

解决此问题的最简单方法是将TDSServerClass LifeCycle属性更改为调用。这将导致您拥有一个无状态服务器,并且服务器将在每个请求中创建一个新会话。但是,您可以在不中断客户端连接的情况下关闭和重新连接服务器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11928483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档