关于com+组件定时连不上数据库的问题(200分)

  • 主题发起人 主题发起人 bessxq
  • 开始时间 开始时间
B

bessxq

Unregistered / Unconfirmed
GUEST, unregistred user!
作的com+组件,现在发现定时(大概运行3天左右)连不上sql server数据库,
造成出错!
请问是什么原因呢?是因为没有购买微软的某个产品吗?
lorderic大虾说过,不能超过16个连接,是什么意思?是不是这个原因造成的?
 
是不是使用ado连接的,有个十分经典的贴子建议不用ado来持续连接sql server,
你用zeosdbo试试吧.
 
确实是用ado连的,那个帖子在哪?谢谢!
 
COM+同時間不能超過16個transaction context;
Transaction context是 COM+(MTS)用來
控制Activity(可以解釋成每一次用戶端呼叫COM+方法的過程)的Transaction用, 所以在同
一時間下, COM+只能處理16個有Transaction的Activity;
如果同時間已達到16, 第17個會
等待之前的Activity退出;
如果超出時間則會timeout;
應不至於發生上述問題
我之前在的公司也發展了三層式架構, 用ADO連接 SQLServer, 全年幾乎無休, 沒有
聽到台灣的同事反應該問題!
我之前在做COM+, 都利用了其stateless的特性, 確實沒有試過將其連線維持長達那麼久的
時間, 這個問題我愛莫能助! 我想應從無法連接SQL Server時的錯誤訊息來推測可能
發生的錯誤
 
并不是说一直连3天,我也是连完了就是Setcomplete或Setabort呀。反正用了这个系统后
3天左右就出错了,只能重新启动服务器,又好了。。。。
查系统日志错误信息就是某个com+是连不上sql server,导致每个com+都连不上数据库了
我老怀疑是什么地方连接了没有释放,可是全都释放了啊
//不过有个操作是每30秒写一次数据库,是在存储过程中写的,这个有关吗?
 
呵呵,这种问题,问的都是很模糊的,按照操作来说,我想你的步骤没有错,我想出错总
有个提示吧,那个提示是什么?
 
dllhost的错误框,内容是:
[DBNETLIB][ConnectionOpen(Connect()).]SQL Server不存在或访问被拒绝。
下边有个确定按钮,确定后整个系统又可以用了
 
是SQLSERVER的问题。我遇到过,不过不记得怎么解决了。明天再给你答!
 
我把每30秒一次的写操作改成每5秒一次,并且共25个连接一起上,结果我发现与天数无关
不到3个小时就出现这个错误了!应该是连接一定次数就出现上述错误了。
到底什么地方不对?是什么地方没有释放吗?
 
谢谢hwy,真的是sql server 的问题吗?等着你的回答
我在codelphi.net上看见的,不知道是什么意思:
1)这个清理工作是怎么做啊?
2)可是我都是在MTS的 creative和destrote事件中写连接ado和关闭的呀,
有什么地方不妥吗?另外的两个事件没有写东西
//
初始化          
  如果需要运行某些代码来初始化MTS组件,不要把这些代码放在Delphi constructor
(构造器)或者COM Initialize方法中,而应该放在MTS组件的OnActivate方法里面。
这是TmtsAutoObject的一个保护方法,我们要在组件中重载它。组件创建后,MTS将调用
这个方法,在真正的方法调用之前做好准备。它总是在方法调用之前被调用,即使组
件是从对象缓存池(COM+)中取回的。                 
  这样做的原因是对象缓存。对于一个被缓存的对象,无论它刚被创建、或是从缓存池
中取回,都应该有同样的表现。所以,以同样的方式初始化对象,是非常重要的。                 
  要做最后的清理工作,在OnDeactivate方法里面操作。//
这个清理工作是怎么做啊?
可是我都是在MTS的 creative和destrote事件中写连接ado和关闭的呀,有什么地方不妥吗?
 
出错时发现数据库的连接数不大,才265个(最大连接数查了,32767个,没超),
com+的最大连接数也才25,但就是出错,应用程序日志和数据库日志都没有错,
是什么原因呢?
 
钩了系统的某个选项后,应用程序日志中出现一大堆错,错误如下:
服务器{//com+的数字//}没有在限定的时间内用DCOM注册
这个com+就是那个每5秒操作一次数据库的的东西
 
我看这个问题不会是ADO的问题,因为,我从未发现过这类事情,
当然,也有过这种错误提示,但都是服务器关闭,或是网络连接出现问题。
自然也不会是SQL Server的问题了,
这问题也不可能出在COM上的。
一定是与网络有关,请检查网络上是否有什么问题可以产生无法连接的错误?
 
后来出现的具体错误描述在下边的帖子里:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1105597
各位请看看!
 
是web的应用,就在服务器端的ie测试的,应该没有网络的连接问题吧?
要么是iis的问题?
 
发现进程中的dllhost一直没有结束,而且内存一直在上涨!!张到一定程度就出错了!
为什么都没有调用com+了,dllhost没有结束呢?不是说空闲3分钟自动释放吗?是不是
这个问题呢?
 
我想如果我没有估计错的话,一定是你的程序有错,进行了非法的dllhost的调用而没有释放,
这样就导致,sql server系统开销过大,最后报错,给你的建议就是仔细检查下你的程序源
代码。
 
MS DTC是什么东西?好象我的机器没有啊?
是不是漏装拉?不过我的2000都装完拉!
 
也找到MS DTC拉,到底是怎么会是呢?为什么不释放?
 
现在的问题就是dllhost不释放,内存猛涨,最终导致出错!
请lorderic看看
 
后退
顶部