一个Com+,两个客户端同时执行一个接口功能就会出错(300分)

  • 主题发起人 主题发起人 lajfox
  • 开始时间 开始时间
L

lajfox

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi6编写了一个Com+,Apartment线程,安装后导出了一个Com+代理,在另一台机器上安装这个代理。还写了一个Com+接口函数的测试程序。
如果只在一个机器上运行这个测试程序,怎么测都正常。但是如果两人同时运行测试程序就必定会有一个人出错,基本上都是代理的那台机器报错,老是报“灾难性故障”错误。
Com+也无法调试(不知道怎么调试)。
各位大侠有什么建议?
 
我觉得你可以先
 
(接上面)去考虑其他的错误,而不是找到底com+出什么问题。
因为几个客户端共用一个com+的端口肯定不会出问题
除非是又其他意外的原因。而且报的是‘灾难性’错误。
我觉得这个错误就是提示哪里肯定有一个比较严重的完全不符合常例的事情在里面
建议先去找和com有关的其他问题,可能有所突破。
并且,你这里描述的不是很清楚,比如说在作什么事情的时候会报这错,你大概是把这个线程写成怎么样的结构等等。你可以再说清楚点,大家一起探讨。
 
该接口是不是可能共享?
看看!
 
这个Com+是通用权限管理,分为四个接口,IAccountMng,IRoleMng,IGroupMng,IPermMng,他们共用同一个数据库操作接口IDatalayer,
IDatalayer封装在一个普通的Dll,通过函数导出接口实例供Com+的接口调用。
我做了一个自动测试程序,编制了10多个测试用例,先添加不同的用户,然后用正确和错误的用户名密码登录,然后还分配权限、角色等等,执行一遍大概20秒钟。我在一台机器上先运行一个测试程序,然后几秒钟内启动另一个,然后就报错了,有'灾难性故障',‘无法启动多个事务’等。但是如果只是一个人启动就没有任何错误。
 
檢查COM+中有無定義全局變量(定義在implentation 下面的共享變量也不行), 如果有, 則有這種情況發生.
 
IDatalayer封装在一个普通的DLL?意思是它不是一个用于访问数据库的COM+组件?
问题是不是出在这里啊?
 
DELPHI可以调试你的COM+的。可以在里面设置断点的。
李维的书上有讲如何设置断点。当然,要在组件管理器里设置那个COM+对象的调试器是DELPHI
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
867
DelphiTeacher的专栏
D
后退
顶部