使用Delphi开发的COM+组件在分发到客户端后调用时报错 (50分)

  • 主题发起人 主题发起人 xujh
  • 开始时间 开始时间
X

xujh

Unregistered / Unconfirmed
GUEST, unregistred user!
我将COM+组件发布到了客户机上,然后在客户机上运行客户端软件,该软件在COM+服务器上是可以正常运行,但在客户端却在Co组件名.Create或者是Co组件名.CreateRemote时,报“Interface not supported”,有谁遇到搞类似的情况,请帮忙解决
 
你的dll 注册没有。
要注册以下
再用
要是联机 还有配置以下
 
fly2003,很多问题都是会者不难,难者不会的,你能否详细说明一下你的分发过程?
 
组件重新装一下就OK了
 
我是用客户端调用协调COM+,再由协调COM+调用逻辑COM+.
我在
逻辑COM+上放置了TADOConnection,TADOQuery,TDataSetProvider;
协调COM+上放置了TSocketConnection,TClientDataSet;
在协调COM+上用连接TSocketConnection逻辑COM+,取得数据.
我用客户端如何连接协调COM+,并取得数据.
如果解决问题,我另开论题,论功行赏.谢谢!!!
 
协调COM+上应该放置 TDComConnection,这样在COM+内部采用DCOM方式连通,但要注意在COM+内部创建另一个COM+时,一定要采用Context接口,建议你最好参考李维的ADO那本书,上面讲的很清楚。虽然他采用了修改Delphi源码的方案,我不是很满意。但也可以自己管理
 
开始/运行/DCOMCNFG/然后激活dcomcnfg.exe
配置成:
常规页:
连接
位置:
在本机
按全性:
1。使用自定义的访问权限
Administrator
EveryOne
Interactive
System
2.使用自定义启动权限
同1。
3。默认
标志:
交互式登陆
(应用服务器用Administrator登陆,客户也用Administrator登陆应该没问题,
另外注意应用服务的数据集(如TTable控件的Active 设成False,TDatabase的LoginPromp
t设成false)
对了 ,要在客户端把你服务端dll注册以下。
 
经测试,一切已经解决了。原因如下:
---------------------------------------------------
1.在Delphi6和Delphi7中,开发COM+组件时,首先要先生成ActiveX Library做为COM+容器,然后在上面添加一个Transactional Object或Transactional DataModule。不能直接创建Transactional Object。这会导致客户端报告"Interface not supported"
2.在Windows工作组网络环境中,需要在COM+服务器中设定一个用户,比如:COM_USER,然后在COM+组件的角色中加入这个用户,客户端也必须有这个同名用户,并以这个用户登录,这样才不会出现“拒绝访问”错误,这里,我特别要说的是服务器和客户端的COM_USER密码也必须一样,但如果在Windows2003环境中一定还要注意密码不能为空,切记。否则,系统将禁止你访问服务器中的接口,总之,可以先用URL方式试一试是否可以连入服务器,例如输入//192.168.0.100。而且,Windows2000环境下安装COM+组件后默认是没有强制安全检查的,但在Windows2003中则默认就有这个选项。故而有些在Windows2000环境下调试通过的COM+组件换到Win2003下可能就变成了“拒绝访问”了。另外要说的是,如果密码为空,则会在客户端运行程序时也会提示"Interface not supported"。
3.在客户端程序中,使用COXXXXXX.Create建立COM+的接口时,发现访问数据库竟然是使用本地的连接名,正好我的客户机上没有服务器上建立的Oracle连接名,所以报出错来。后改为CoXXXXXXX.CreateRemote(服务器名)后解决问题。这里还是有些不太理解,既然要在本地安装应用程序代理,就应该使用的是服务器端的连接啊,而且,COM+组件的激活页中是可以指定COM+服务器的位置的,那么CreateRemote中一旦指定死了,不久没有用了吗?
以上是我的简单测试结果,可能还会有没注意到的地方,也还有很多要测试的东西,比如,COM_USER应该分配什么样的权限以满足只能访问COM+,而不能变成超级用户来控制服务器。
以后会逐步把测试结果写出来
 
后退
顶部