就是了,我现在的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是在设计时连接的,这不怪它吧?
COM+是just in time激活的啊,客户端不连接,在一定时间就会停止组件,但有客户调用,组件就会被激活,哪用手动激活啊。
看看组件是不是设置为just in time激活,应该是缺省的啊。
比如说,组件打开了某资源,这时候出了异常,在处理异常的时候,资源没释放,就可能有问题.再具体些,比如组件使用AdoConnection连接数据库,设置的是保持连接方式,
如果通讯突然断掉,程序抓到异常后应该主动AdoConnection断开,如果只是忽略抛掉异常.
下次数据库操作都会不成功..
一:另外写一个类似的程序,仅实现一个简单方法即可,测试程序框架是否正确。
二:不使用DComConnection,改用SocketConnection。
然后重新编译你的 COM+,这个DLL是最新的,注册后不要安装,
(这种客户端照样可以用),如果你的客户端不能调用你的COm+那就是代码问题
如果可以,可以是你的olecheck()这个鸟函数搞的鬼,把它干掉,直接建立对象。
现在却有了另外的问题,数据无法写回数据库了,得了个"Variant does not
reference an automation object"的Error框。这又是怎么啦。
在更新对象中没有把Dcomconnection设为true,如此而已。多谢
那么多位。