我开发了几个COM+组件,是访问数据库的,并且安装到了组件服务管理器上。现在我写了一个客户端调用这些组件,但每次运行时都得到组件服务管理器里关闭再打开该应用程序,否则客户端就停在那里,一点还应也没有。而且,如果久一点不调用这些组件,只好再关开一次。不知这是怎么回事,COM+里面还有什么奇怪的东西吗?在这里先谢了。

解决方案 »

  1.   

    是不是你的线程模式和交易模式,没有设置正确。要不然就是内部逻辑错误,让COM+死在内存中了----只有杀死内存中的COM+,重新调入才可运行。
      

  2.   

    我的理解如下:
      1、M+组件在调试完毕后,忘记把在调试器中启动这个选项没有关掉。如果选中了在调试器中启动这个选项,COM+将在启动后会一直停着。
      2、第二个问题:如果久一点不调用这个组件,只好再关开一次。
        是因为COM+中有个选项。闲置关闭前的时间,如果您选中“空闲时保持运行“这个选项,应该不会有大的问题。
      

  3.   

    我是按照李维的那本书写的,一个M T S / C O M +数据模块,支持事务,一个M T S / C O M +查询对象QueryObj,支持事务,用DcomConnection链接事务数据模块,就输出一个接口,线程模式都取默认值Apartment,最后再用客户端Create这个查询对象.这些应该错不了的吧?至于这个“内部逻辑错误,让COM+死在内存中了”,我就不明白了,不过以前我确实得到结束任务里杀了好多次DllHost.exe。在组件服务管理器里的“在调试器中启动”选项我也注意到了,我调试完后都勾去了。
      

  4.   

    而第二个问题,现在我想能不能是这样的,不论什么时候打开客户端都能连接到数据库并看到数据,就跟用DataSnap开发的一样:客户端可以自己激活应用服务器的。不知道怎么实现?
      

  5.   

    你看得到你的组件被激活了么? 在系统的管理工具\组件服务程序中如果你看到你的组件是活动的,问题就出在你的COM+程序内部,如果COM+没有活动,问题出在你的客户端,一种可能是你在客户端没有安装代理,二是客户程序没有正确地调用或创建COM+服务程序
      

  6.   

    可以了,是把查询组件或更新对象的dcomconnection的connected改为false。
    现在却有了另外的问题,数据无法写回数据库了,得了个"Variant does not 
    reference an automation object"的Error框。这又是怎么啦。
      

  7.   

    Game Over。没事了,现在一切正常。至于那个Error,是由于我
    在更新对象中没有把Dcomconnection设为true,如此而已。多谢
    那么多位。