我手里的一个老项目,用的是Delphi scktsrvr.exe 架构的三层程序,用户数300左右。使用过程中,一直有用户反映,有时表格填写地好好的,提交时却报错:远程主机强迫关闭了一个现有的连接。
重新读了一下源码,没看出什么毛病。于是上网百度,终于了解到,用户和服务器之间的连接,由于各种原因断掉,就会有这样的提示。应该把它看做常态。于是我就想在Application.OnException事件中,捕获到该错误时,重新使客户端连接服务器。
然而,测试结果与我想的大相径庭。客户端重新连接前,先 disconnect。这一步就卡死了!无法 disconnect,就无法再 connect。我只好另想办法。
delphi 2010及后继的版本中,三层加入了心跳包概念。参照该概念,我在程序的主窗口中加了一个 TTimer。每当用户登录后,激活TTimer,每隔一段时间刷新一下用户权限(也可改为别的,如:刷新全局变量),一直保持数据库连接不断。
修改后测试,问题解决。
总结:解决办法不一定是最好的,但是最经济的!
本文详细阐述了如何解决Delphi三层程序中遇到的远程主机关闭现有连接导致的表填写提交错误问题。通过加入心跳包概念,实现主窗口中TTimer的激活与数据库连接的持续刷新,成功解决了用户在操作过程中的断开连接问题。
2527

被折叠的 条评论
为什么被折叠?



