我用VB编写的COM+组件,类A为根对象,其中调用A1、A2两个二级对象。在组件服务中新建应用程序,在其中导入已被注册的组件,将类A设为需要新建事务,A1和A2设为支持事务。然后导出为MSI文件,在其他人机器上安装。运行时出错为无法连接事务管理器或事务管理器不存在。假如把类A的事物属性改为支持,在他人机器上可以运行,但是如果A1或A2中出错,则事务无法完全回滚。
我的机器是Win2000 pro,安装的机器是2000 Server和Pro同样出问题。在我的机器中没有问题。
请问是配置的问题还是我制作方法的问题。谢谢!

解决方案 »

  1.   

    好像是MSDTC没有运行或是配置方面的问题。在Administrative tools -> Component services中检查MSDTC的配置运行情况。>假如把类A的事物属性改为支持,在他人机器上可以运行,但是如果A1或A2中>出错,则事务无法完全回滚。
    此时如果A为根对象,那么COM+ runtime根本不会创建transaction stream,A1,A2当然也不会从A那里得到transaction了。
    - 微软全球技术中心 VC技术支持
     
    本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
      

  2.   

    谢谢acptvc.这个问题已经基本解决,主要原因是Oracle与MSDTC的合作问题,很抱歉在上面没有说清楚。
    我的程序后台数据库使用Oracle 8.1.6,客户端安装了Oracle client 8.1.7。刚开始我的机器上按照 http://support.microsoft.com/support/complus/mtsandoracle.asp?GSSNB=1中说的修改了注册表,而其他人只是安装了客户端,没有修改注册表,于是就有这种情况发生。
    按照上面网页中的步骤,安装win2000 server,Oracle client 8.1.7,sp2,修改注册表,然后用OracleStress进行测试,当载入sqllib80.dll时失败,不知是什么原因。
    而且更改注册表后MSDTC时常会占用所有的CPU资源。