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

解决方案 »

  1.   

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

  2.   

    不会吧!!
    COM+是just in time激活的啊,客户端不连接,在一定时间就会停止组件,但有客户调用,组件就会被激活,哪用手动激活啊。
    看看组件是不是设置为just in time激活,应该是缺省的啊。
      

  3.   

    可能是组件编写的问题.
    比如说,组件打开了某资源,这时候出了异常,在处理异常的时候,资源没释放,就可能有问题.再具体些,比如组件使用AdoConnection连接数据库,设置的是保持连接方式,
    如果通讯突然断掉,程序抓到异常后应该主动AdoConnection断开,如果只是忽略抛掉异常.
    下次数据库操作都会不成功..
      

  4.   

    就是了,我现在的COM+得在开始时关开一次才能JIT激活的,我纳闷着呢。我是按照李维的那本书写的,一个M T S / C O M +数据模块,支持事务,一个M T S / C O M +查询对象QueryObj,支持事务,用DcomConnection链接事务数据模块,就输出一个接口,线程模式都取默认值Apartment,最后再用客户端Create这个查询对象.我的事务数据模块就是仅用ADO来数据库而已,没有什么代码的,AdoConnection的KeepConnection和LoginPrompt设了假,在组件的Ativate和DeAtivate连接和关闭数据库链接,还有,我在查询对象的数据模块中的DconConnection是在设计时连接的,这不怪它吧?
      

  5.   

    先谢这么多位的捧场。若说我组件有问题,但我已写了不下三个不同的组件连接不同的数据表了,前几天机难得坏一次,又重装了系统和Delphi7,但依旧如此。就是真有问题,那为什么关开一次后就什么事都没有呢?现在还发现这么个Bug,就是我调用这些组件后,发现“组件服务”上的那些组件不再转了,更不用说有激活多少次了。还有法子吗?
      

  6.   

    试试这个:
    一:另外写一个类似的程序,仅实现一个简单方法即可,测试程序框架是否正确。
    二:不使用DComConnection,改用SocketConnection。
      

  7.   

    楼主可以这样搞,就是把你的COm+组件在组件服务里干掉,
    然后重新编译你的 COM+,这个DLL是最新的,注册后不要安装,
    (这种客户端照样可以用),如果你的客户端不能调用你的COm+那就是代码问题
    如果可以,可以是你的olecheck()这个鸟函数搞的鬼,把它干掉,直接建立对象。
      

  8.   

    真要晕,我在两台机上写了n遍这样的例子:一个COM+数据模块,一个查询COM+对象,一个客户端,结果如:在我机上Dephi7上写成功了一个,后面四个都不行,在另一台机上Dephi6上一个不成功,第二个可以JIT,再下去的不行,再回我的机上,重装的Dephi6,把那台机的成功例子移过来,可以,再新建几个,又死了……天啊。我的都是注册的,在客户端是用CreateRemote创建查询对象的。Over
      

  9.   

    还有个问题?你不会是用RegSvr32注册的吧?COM+的注册方式是不一样的。
      

  10.   

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

  11.   

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