DCOM远程调用的问题?(本机可以,远程拒绝访问)(50分)

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

xingyanwei

Unregistered / Unconfirmed
GUEST, unregistred user!
我做了一个DCOM的服务,然后作了一个客户端调用。
现在这个客户端在我机器上调用完全没有问题,
但是将程序拷到我旁边的机器上就无法调用了,出现两种错误
1.拒绝访问
2.RPC资源不可用(好像是这样)

请问大家谁有经验,帮帮我,谢谢!

procedure TForm1.btn1Click(Sender: TObject);
var
upd : Ixnhjk;
resa : Integer;
begin
resa := 0;

// upd := Coxnhjk.CreateRemote('xyw');
// upd := Coxnhjk.CreateRemote('lwl');
upd := Coxnhjk.CreateRemote('luckynavy');
upd.Update(edt1.Text,edt2.Text,edt3.Text,resa);

if resa = 0 then
ShowMessage('失败')
else
ShowMessage('成功');

end;
 
深入分析接口不支持错误



接口不支持错误,是Com Based组件在调试阶段经常发现的错误。在不同的操作系统中,这个错误表达有所不同,Interface not Suported,类没有注册,没有注册类别,指的都是同一种错误。

Com Based组件是一种服务,它一般以.dll或.Ocx形式存在,也可能以.exe形式存在。.dll可以注册成本地服务(只能被本机调用),也可以注册成网络服务(被网络上的所有机器调用)。.ocx为带界面的服务,一般只能注册成本地服务。

使用regsvr32 或tregsvr32 注册本地服务,使用Com+环境安装网络服务。

.tlb(类型库)为.dll的接口声明文件,在异机调用Com+服务时,需要在调用方注册Com+服务的.tlb文件。

.tlb只能通过tregsvr注册。

一般情况,调用服务的接口,相当于调用一个过程,如果这个过程不存在,则出现这个错误。

服务本身没有注册,服务类型库(.tlb)没有在客户注册,或,客户没有访问服务的权限,都可能出现这个错误。

出现这个错误时,首先,重新注册dll(或重新安装Com+),看看注册时是否提示失败,如果失败,一般是依赖的资源没有拷贝到system32目录造成。

第二,在本机调用(使用Com+导出包=1,或,服务ip设为127.0.0.1),一般应该成功。

第三,在异机注册.tlb,(使用Com+导出包=0,或,服务ip设为安装服务的ip如果还是提示这个错误,一般可以肯定是无权访问的问题,进入下一步:

第四,以服务器存在的用户名密码登录客户机器,如果访问成功,检查Com+环境,安全设置/调用的身份证级"从"包"改成"无",启用Guest用户,并修改服务器的默认用户名。这时,客户以任意用户(只要服务器不存在这个用户)登录,应该可以访问。
 
myliu,首先我本机上调用DCOM服务是可行的,所以服务应该没有问题,关键在访问。
我按照你说的开启了guset用户,"从"包"改成"无",还是无法调用,
你再帮我想想,可能哪里出问题了?
再次感谢!
 
“需要在调用方注册Com+服务的.tlb文件”
现在我的服务是在A机器上运行,在B机器上用测试程序调用A机器的服务。
那么还需要在B机器上注册吗?
 
1.操作系统用户权限不够
2.dcom标识应设置为交互式用户.
3.dcom启动和激活权限、访问权限、配置权限都设置为everyone.
检查以上三种问题后,肯定解决你的问题。
 
红军,你的qq是多少号,可以联系你吗?
 
红军,我加你QQ了,你接受啊
 
现在我作的服务是在com+应用程序目录下显示,不是在DCOM配置中显示,是不是我做的有问题了?
 
现在我作的服务是在com+应用程序目录下显示,不是在DCOM配置中显示,是不是我做的有问题了?
 
授权问题。用socketconnection控件可以解决这个问题
 
张辉明, 你说的授权问题是什么?不太明白。
我是建一个activeX Library,然后添加一个Automation Object,写完业务后就
Register ActiveX Server,然后Install Com+ Object。
用Dcomcnfg查看,是在Com+目录内,不是在Dcom配置目录内,不知道我做的是不是Dcom。
如果不是,Dcom应该怎么做?
 
后退
顶部