急!!!DCOM连接的问题
我用ATL作的Service和client在一台机器上运行通过,但改为两台机器通讯出错!
我已将*.exe和*ps.dll拷到服务器和客户器的winnt\system32目录下,并* /Service和regsvr32 *ps.dll,然后客户机运行出错,说接口拒绝访问。代码如下:
COSERVERINFO serverInfo;
ZeroMemory(&serverInfo, sizeof(COSERVERINFO));
COAUTHINFO athn;
ZeroMemory(&athn, sizeof(COAUTHINFO));
// Set up the NULL security information
athn.dwAuthnLevel = RPC_C_AUTHN_LEVEL_NONE;
athn.dwAuthnSvc = RPC_C_AUTHN_WINNT;
athn.dwAuthzSvc = RPC_C_AUTHZ_NONE;
athn.dwCapabilities = EOAC_NONE;
athn.dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
athn.pAuthIdentityData = NULL;
athn.pwszServerPrincName = NULL;
serverInfo.pwszName = L"finix";
serverInfo.pAuthInfo = &athn;
serverInfo.dwReserved1 = 0;
serverInfo.dwReserved2 = 0;
MULTI_QI qi = {&IID_IMain, NULL, S_OK};
try
{
m_pSerMain = new IMainPtr;
}
catch(...)
{
AfxMessageBox(AFX_IDP_FAILED_MEMORY_ALLOC, MB_ICONSTOP);
return;
}
HRESULT hResult = CoCreateInstanceEx(CLSID_Main, NULL,
CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER, &serverInfo, 1, &qi);
/////上面语句出错
if (FAILED(hResult))
{
_com_error err(hResult);
CString strMessage = "Unable to access IMain because ";
strMessage += err.ErrorMessage();
/////说IMain拒绝访问
AfxMessageBox(strMessage, MB_ICONSTOP);
delete m_pSerMain;
m_pSerMain = NULL;
return;
}
m_pSerMain->Attach((IMain*)qi.pItf);
。。。。。。。。。。。。。。
问题点数:100、回复次数:27Top
1 楼finix(*_*)回复于 2002-05-13 17:09:36 得分 0
help!!!
help!!!Top
2 楼finix(*_*)回复于 2002-05-16 09:01:49 得分 0
高手快来帮忙啊!Top
3 楼finix(*_*)回复于 2002-05-16 09:48:09 得分 0
快来看看把Top
4 楼wb197(断点运行)回复于 2002-05-23 11:03:30 得分 0
关注Top
5 楼wb197(断点运行)回复于 2002-05-23 13:28:51 得分 0
不会真的没人知道吧Top
6 楼huqiming(Super)回复于 2002-05-23 15:30:28 得分 25
拒绝访问的可能性有几种。
一个是因为2k服务器,客户端没有访问权限
一个是因为dcomcnfg没有配置客户端的访问权限,甚至没有开通远程访问(enable remote connection)
还有可能是客户端没有启动服务的权限,解决办法是先在服务器端运行一个客户程序,再去客户端运行客户程序。
再要有问题就复杂了,先试试吧!
Top
7 楼wyzegg(蛋)回复于 2002-05-23 20:39:13 得分 10
需要在服务器端用DCOMCNFG配置权限。
如果你选择使用操作系统的安全性的话,客户端登录的用户,需要在服务器上存在并且有启动和访问组件的权限
Top
8 楼sailing1492(扬帆)回复于 2002-05-23 21:24:43 得分 5
一个是因为2k服务器,客户端没有访问权限
这能否再说明点呢,2K服务器怎样导致了客户没权限?
一个是因为dcomcnfg没有配置客户端的访问权限,甚至没有开通远程访问(enable remote connection)
(enable remote connection)是指 “在这台计算机上启动分布式COM”吗?
Top
9 楼sailing1492(扬帆)回复于 2002-05-23 21:26:33 得分 0
我也碰到了,反复比较,实验,费了一个小时终于通了。通的不明不白Top
10 楼finix(*_*)回复于 2002-05-27 13:10:33 得分 0
在服务器上DCOMCNFG中安全性中使用自定义的访问权限,加入了客户端的机器名,同样在使用自定义启动权限一样加入了。
在客户端上DCOMCNFG中位置中指定服务器名,身份验证为无
可是还是说拒绝访问!
各位还有没有其它的 方法补充的啊?急啊!!!Top
11 楼linghuye(令狐叶)回复于 2002-05-27 13:26:01 得分 30
1.机器通吗?
2.跨域了吗?
3.报错时,服务器上的你的DCOM程序(是EXE吗,还是DLL)进程起来了吗?
4.加上Everyone,及 Network 试了吗?
Top
12 楼finix(*_*)回复于 2002-05-27 13:44:20 得分 0
客户端可以找到服务器的
都在一个workgroup中
我是把服务器程序进入调试状态下启动客户程序的
最后的问题不知道如何解决!是不是在服务器程序中的 DCOMCNFG中自定义访问权限和启动权限中加入everyone和network?
Top
13 楼finix(*_*)回复于 2002-05-27 13:47:55 得分 0
现在加了还是不行啊!Top
14 楼mrchen_fj()回复于 2002-05-27 14:03:32 得分 5
1.是在自定义访问权限和启动权限中加.
2.停掉调试状态下的DCOM服务程序,由客户端直接启动试试.
3.你的客户端和服务端都是Win2000吗?
4.finix是你的服务器名吗?或换成IP地址试试 "192.168.X.X"
5.身份标识选择"交互式用户"了吗?
Top
15 楼mrchen_fj()回复于 2002-05-27 14:10:04 得分 0
先停掉服务器端的DCOM程序,启动客户端调用,然后跑到服务器端机器看程序被启动了吗?
在马上进入"计算机管理",“事件查看器","应用程序"&"安全性",看看有没有消息说 某某企图启动你的DCOM被拒绝,详细原因是什么.Top
16 楼finix(*_*)回复于 2002-05-27 14:11:05 得分 0
1.加了
2。还是不行
3。服务器是2000server 客户是2000professional
4.是的
5.我是用最后一项系统帐户的,Top
17 楼finix(*_*)回复于 2002-05-27 14:15:46 得分 0
有没有人愿意帮我调试一下的?代码很短!Top
18 楼finix(*_*)回复于 2002-05-27 14:16:44 得分 0
我的qq106506571Top
19 楼zhzhd(东东)回复于 2002-05-27 14:18:45 得分 5
我是通过域访问服务器组件的。服务器端用MTS。客户端需要注册(regsvr32 c:\com\chengxu.dll)Top
20 楼linghuye(令狐叶)回复于 2002-05-27 19:48:56 得分 0
开会去了.
在客户端启动,报错,跑到服务器上,打开"计算机管理", "事件查看器",
"应用程序"&"安全性",看看是不是说"某某试图启动Dcom,被拒绝,原因是..".
还不行!我kao,发给我代码我测一下. linghuye@163.com
Top
21 楼linghuye(令狐叶)回复于 2002-05-28 16:38:58 得分 0
0.我没有qq
1.将服务类CServiceModule中Run方法中原CoInitializeSecurity(...)改为: CoInitializeSecurity(NULL, -1, 0, NULL, RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, 0, 0);
2.服务端设身份验证级别"无", 身份标识 "交互式用户", 测试通过.
3.多客户连接,一般每个客户有一个DCOM对象与之对应, 不可能连到同一对象上。 但可能都处在同一ser.exe进程内,你用全局变量试试。但DCOM一般是或说严格的使用应是 无状态 的.Top
22 楼finix(*_*)回复于 2002-05-29 15:50:56 得分 0
To linghuye:
请问你是如何注册的,我在身份标识中不能选交互式用户,是不是你用regserver做参数注册的?
我的程序最终是这样的,所有的客户都通过服务器进行通讯的,类似聊天室一样,如果连接的都不是一个服务器实例的话,似乎无法通信了(猜想)。Top
23 楼finix(*_*)回复于 2002-05-30 13:11:18 得分 0
up一下Top
24 楼finix(*_*)回复于 2002-05-30 14:17:02 得分 0
我怎么还是连不通啊
我要疯了!!气死我了Top
25 楼redpower(常宁)回复于 2002-05-30 14:23:36 得分 20
权限没有设置对,改权限!Top
26 楼redpower(常宁)回复于 2002-05-30 14:34:35 得分 0
注意设置权限的时候别忘了设置每个COM 的权限Top
27 楼finix(*_*)回复于 2002-05-30 21:12:32 得分 0
在这里再次谢谢大家得帮助
结贴Top
28 楼linghuye(令狐叶)回复于 2002-05-31 20:06:04 得分 0
我把程序编译完,到服务器上
ser.exe /regserver 注册的,同时注册存根代理.
不能选交互式用户吗,真奇怪,在我的环境中选其它项也是不通的.
至于通信,可以开共享内存区,或使用硬盘文件形式交流等.
但DCOM在连接数上好像有限制.
Top




