Datasnap 会话已过期

Datasnap session has expired

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

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

重现问题的步骤:

  1. 打开ProjectGroup1.groupproj
  2. 编译和运行 休息项目。这是服务器
  3. 编译并 运行 客户端项目。
  4. 在其余项目上单击开始按钮
  5. 单击客户端项目上的按钮 1。它将调用 rest EchoString 方法
  6. 点击 rest 项目的停止按钮
  7. 在其余项目上单击开始按钮
  8. 单击客户端项目上的按钮 1。你必须得到 "Session has expired" issue

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

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

TDSRestConnection.PreserveSessionID=False

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

当会话超时时,最好使用下面的代码初始化会话,然后重新请求。

TDSRestConnection.SessionID := '';

客户端这样处理,适当调整服务端的session超时时间,可以让服务端发挥更大的作用