【问题标题】:Datasnap session has expiredDatasnap 会话已过期
【发布时间】:2019-11-22 07:33:22
【问题描述】:

我一直在使用使用 datasnap 的客户端服务器应用程序...在服务器重新启动之前一切正常。一旦服务器重新启动,客户端也必须重新启动。如果不重新启动客户端,客户端无法与服务器通信,因为烦人的问题“会话已过期”。谁面临同样的问题?如何求解?谢谢

我创建了示例项目来阐明我的意思。下载link

重现问题的步骤:

  1. 打开 ProjectGroup1.groupproj
  2. 编译并运行 rest 项目。是服务器
  3. 编译并运行客户端项目。
  4. 点击rest项目的开始按钮
  5. 单击客户端项目上的按钮 1。它将调用rest EchoString方法
  6. 在休息项目上单击停止按钮
  7. 点击rest项目的开始按钮
  8. 单击客户端项目上的按钮 1。您必须解决“会话已过期”问题

【问题讨论】:

  • 您使用的是哪个版本的 Delphi?
  • 我使用的是 Delphi XE7
  • 我问的原因是我记得 TDSRestConnection 的连接问题,即使在 10.1 的版本中也是如此。柏林。这里有解决办法stackoverflow.com/questions/23796490
  • TDSHttpWebDispatcher.SessionTimeout=0 没有帮助,因为我重新启动服务器应用程序

标签: delphi datasnap


【解决方案1】:

好的,看来我找到了解决办法。

在客户端只需设置 TDSRestConnection.PreserveSessionID=False。我想每个请求都会有新的会话 id,因此它永远不会过期......

【讨论】:

    【解决方案2】:
    TDSRestConnection.PreserveSessionID=False
    

    每次都创建一个新会话是一种简单的方法,但它会给服务器带来不必要的压力。

    当发生会话超时时,最好用下面的代码初始化会话并再次请求。

    TDSRestConnection.SessionID := '';
    

    这样处理客户端,适当调整服务器的会话超时时间,可以让服务器更有效。

    【讨论】:

      猜你喜欢
      • 2022-11-10
      • 2016-08-04
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多