Datasnap 会话已过期
Datasnap session has expired
我一直在使用 datasnap 的客户端服务器应用程序...一切正常,直到服务器重新启动。一旦服务器重新启动,客户端也必须重新启动。如果不重启客户端,客户端会因为烦人的问题而无法与服务器通信 "session has expired"。谁面临同样的问题?如何求解?谢谢
我创建了示例项目来阐明我的意思。下载 link
重现问题的步骤:
- 打开ProjectGroup1.groupproj
- 编译和运行 休息项目。这是服务器
- 编译并 运行 客户端项目。
- 在其余项目上单击开始按钮
- 单击客户端项目上的按钮 1。它将调用 rest EchoString 方法
- 点击 rest 项目的停止按钮
- 在其余项目上单击开始按钮
- 单击客户端项目上的按钮 1。你必须得到 "Session has expired" issue
好的,看来我找到了解决办法
在客户端只需设置 TDSRestConnection.PreserveSessionID=False。我想每个请求都会有新的会话 ID,因此它永远不会过期...
TDSRestConnection.PreserveSessionID=False
每次都创建一个新会话是一种简单的方法,但它会给服务器带来不必要的压力。
当会话超时时,最好使用下面的代码初始化会话,然后重新请求。
TDSRestConnection.SessionID := '';
客户端这样处理,适当调整服务端的session超时时间,可以让服务端发挥更大的作用
我一直在使用 datasnap 的客户端服务器应用程序...一切正常,直到服务器重新启动。一旦服务器重新启动,客户端也必须重新启动。如果不重启客户端,客户端会因为烦人的问题而无法与服务器通信 "session has expired"。谁面临同样的问题?如何求解?谢谢
我创建了示例项目来阐明我的意思。下载 link
重现问题的步骤:
- 打开ProjectGroup1.groupproj
- 编译和运行 休息项目。这是服务器
- 编译并 运行 客户端项目。
- 在其余项目上单击开始按钮
- 单击客户端项目上的按钮 1。它将调用 rest EchoString 方法
- 点击 rest 项目的停止按钮
- 在其余项目上单击开始按钮
- 单击客户端项目上的按钮 1。你必须得到 "Session has expired" issue
好的,看来我找到了解决办法
在客户端只需设置 TDSRestConnection.PreserveSessionID=False。我想每个请求都会有新的会话 ID,因此它永远不会过期...
TDSRestConnection.PreserveSessionID=False
每次都创建一个新会话是一种简单的方法,但它会给服务器带来不必要的压力。
当会话超时时,最好使用下面的代码初始化会话,然后重新请求。
TDSRestConnection.SessionID := '';
客户端这样处理,适当调整服务端的session超时时间,可以让服务端发挥更大的作用