2012-08-01 92 views
2

我有一个使用TSocketConnectiom连接到应用程序服务器的Datasnap应用程序(Delphi 7)。如果我的应用程序在打开clientdataset后长时间保持闲置状态,大多数时候我想刷新clientdataset,应用程序会冻结而不会引发任何异常。看起来连接断开,Socketconnection不知道这一点。我我经常遇到这个问题,我不确定我在哪里可以找到解决方案。它可能是TSocketconnection中的错误吗?datasnap TSocketconnection挂起

问候

+0

您是否检查过'netstat'(一个'DOS'实用程序)以查看您的应用程序是否仍然与服务器有连接?您可以在客户机和服务器机器上使用'netstat'来查看双方是否仍然显示'ESTABLISHED'连接。如果服务器在与客户端不同的计算机上运行,​​您还可以使用Ethereal之类的数据包嗅探器来捕获流量。这有助于我过去解决通信问题 - 缩小问题发生的位置...... – 2012-08-01 20:34:24

+0

感谢您的回复......您的意思是在刷新客户端数据集之前,我应该检查与其他类似netstat的连接? – ssnkh 2012-08-01 20:44:56

+0

如果在第一个客户端应用程序断开连接后由第二个客户端应用程序建立连接,会发生什么情况? Net stat显示已建立连接,但Socketconnection已断开连接... – ssnkh 2012-08-01 20:55:22

回答

0

防火墙有时会下降不活动的TCP连接一段时间后保持其高速缓存利用率较低。在这种情况下,它有助于调用一些服务器方法(可能每五分钟)。

如果服务器端DataSnap会话的“setup和teardown”代码不耗费资源,那么还可以在所有操作之间断开连接并重新连接DataSnap客户端。这将启动一个新的TCP连接,执行并关闭它。

+0

是否有可能知道为什么TSocketConnection(Datasnap)在连接断开时有时不会引发异常? – ssnkh 2012-08-02 08:44:20

+2

如果客户端不尝试读取或写入,并且连接丢失,则不会引发异常。这对于TCP套接字连接是正常的。 – mjn 2012-08-02 08:49:50

+0

好的,但是当我想查询某些东西时,它不会引发异常。这是场景:建立到远程服务器的连接,读取一些数据,然后程序进入空闲状态很长时间,连接断开在这个时候并没有例外,现在当我想读一些东西,我不会例外,只是一切冻结,我应该杀死这个过程... – ssnkh 2012-08-02 09:04:32