问题介绍:
  本人单独开发的这个项目公司虽然已经用了一年多了,但是中间出现的问题也确实伤透了脑筋。
1.服务器端:oracle ; 中间层 :midas,scktsrvr和TRemoteDataModule(数据库的操作都在这个模块用ADO实现,生成了一个DLL文件,后注册成了一个组件);客户端:TSocketConnection,TClientDataSet
DELPHI62.客户端如果一段时间不进行查询操作,连接就会关闭,不能进行下面的数据库操作了,客户端SQL报错为“关闭连接”(但是在中间层scktsrvr发现连接没有释放,如果隔断的时间不长就不会有这种现象发生)我现在的笨办法就是遇到这种情况我就在程序里面重新连接一次,不过就是在中间层多产生了一个连接,如果经常有这样的事情发生,中间层scktsrv会产生很多相同的连接,本来客户数在同一时间多的时候有150个左右,如果重复连接又不能释放的话,大家可以想问题的严重性,因此就经常有客户端上不了的情况,客户端报错为"目标积极的拒绝",问题肯定就是连接数太多的缘故,我怎么调试也释放不了那些无效的连接,很恼火啊.希望有经验的高手能介绍怎么去释放掉那些无效的连接(客户端?,中间层端?)3.中间层我用了两台机器,一台PC服务器(A),另一台为配置很低的机器(B),不过里面基本上没有装别的东西),结果发现连接B的速度要快与A的速度(不懂其解),而且在连接数较多的情况下,在A中scktsrvr打开不了(已经在运行状态中),而B可以,由于2的原因,客户经常说有上不去的现象,这两天把B换成了一台新买的PC机(C) ,重新安装中间层,结果发现连接速度确实很快,但是严重的是客户端即使关闭了系统,scktsrvr居然还不能释放掉重复产生的连接(2产生的那种不能释放的连接,但是以前客户端关闭后是能够全部释放的啊),我晕啊,结果可想而知C机器中间层经常出现资源耗尽状态,客户端报错为"灾难性故障",我倒啊4.请有经验的高手提供一些有建设性的意见,同时请这方面有研究的大虾们来共同讨论一下,非常感谢!!!!,分不够可以再加,^_^!!!

解决方案 »

  1.   

    to  bear_tj() :
    在中间层设置释放时间  是指 scktsrvr 的 Inactive Timeout 吧
      

  2.   

    应用服务器换一种方式,直接编译成exe文件,不要用dll看看问题能否有所改善
      

  3.   

    BDE也有类似的问题,SESSION会话期不能安全释放,也在郁闷中
      

  4.   

    不用这个好几年了
    建议在 TRemoteDataModule 处做个数据库连接池  统一管理数据库的连接
      

  5.   

    to zfmich() 
      是的! lovendII(戒情人) 
       有个类似的经验?mxj2000(小马(QQ 25604698 主页 www.wyx2008.com/mxj)) 
      能解决2的问题吗?
      

  6.   

    编译成exe也还是会有这样的问题,不过,好像稍微好一点而已
      

  7.   

    我以前做过一个三层的,应用服务器直接编译成exe在ap服务器端运行。