各位大师,我有一病于心头多日,始终不得其解。我们在W2K+SQLSERVER2000+VC6下开发的COM+应用程序,大多数情况下运行正常(10/100M的LAN环境),但有时候CLIENT端调用SERVER端的组件(不一定是哪个)时,在CLIENT端会出现程序无反应,作死机状;此时观察SERVER端COM+组件状态,发现其调用时间在不断增长;这时如有其他的CLIENT调用此组件,也作死机状;这是如果停止整个组件并重新启动,又恢复正常。最令我不安的是这种情况无法预期,我不知道什么时候会发生。目前程序处于试运行阶段,只有不到10个CLIENT,SERVER的CPU及内存都足够大,网络也正常;另外,我还做了组件的POOLING,不知有无关系。我自己推测可能有几方面原因:1、组件本身有问题;2、CLIENT调用方式有问题;3、组件运行的环境设置有问题;但无法确定。
  大多数的组件事务类型都是NOT SUPPORTED.只有一个组件使用的事务类型是REQUIRED.程序中是通过setcomplete、setabort、enablecommit和disablecommit显式控制事务的提交回滚操作.
  另外我发现在COM里故意写个死循环就能造成上述现象!
请各位老师不吝赐教,多谢!^_^

解决方案 »

  1.   

    请老师们仔细给出解决办法,是不是COM+事务编程不当造成DLL的死锁,请老师门救小弟一命啊!
      

  2.   

    如果是程序问题,那么有哪几种情况呢:一种是程序某模块陷入死循环;另一种是某个DLL异常退出,没有返回事务状态(不确定)还有什么可能 的原因呢?代码有几百M,如何查找呢?
      

  3.   

    写文件,挨个调试检查啊.
    还有看看假死的时候SERVER和CLIENT上的程序CPU占用情况,如果有一方100%,那么你应该能确认是那边的问题了.
    还有可能就是不响应也会表现为假死,但这时不会出现CPU100%的情况.
    具体问题具体分析,再自己研究一下吧.
      

  4.   

    任务管理器里CPU,内存都没有什么异常谢谢楼上的回答