2008-11-29 57 views
2

很抱歉,如果这是一个有点长whinded ...考虑这个问题:为什么我从代理调用COM +方法获得E_ACCESSDENIED?

我有一个名为公司命名空间使物体称为服务器它具有以下方法COM +应用程序:

bool Server.Execute(IOptions options) 

IOptions Server.CreateOptions() 

IOptions只是有几个布尔读/写性能如下:

IOptions.Option1 (bool) 

IOptions.Option2 (bool) 

我创建了一个客户端应用程序用下面的代码lication:

Company.Server s = new Company.Server(); 

Company.IOptions serverOptions = s.CreateOptions(); 

serverOptions.Option1 = false; 
serverOptions.Option2 = true; 

s.Execute(serverOptions); 

我安装COM +应用程序在计算机A上,然后在计算机A上执行客户端,一切都很好。

我再修改客户端应用程序,以便它会创建自己的实现IOptions如下:

public class ClientOptions : Company.IOptions 
{ 
    public bool Option1 { get; set; } 
    public bool Option2 { get; set; } 
} 

Company.Server s = new Company.Server(); 

ClientOptions clientOptions = new ClientOptions(); 

clientOptions.Option1 = false; 
clientOptions.Option2 = true; 

s.Execute(clientOptions); 

我再次执行计算机A上的客户端应用程序,一切都很好。

如果我安装在机器B上的COM +应用程序作为代理机A,然后执行客户端,我得到一个E_ACCESSDENIED错误的呼叫:

s.Execute(clientOptions); 

下面的代码的执行上的总结机器B访问机器A

Company.Server s = new Company.Server(); 

Company.Options serverOptions = s.CreateOptions() 

serverOptions.Option1 = false; 
serverOptions.Option2 = true; 

s.Execute(serverOptions); // this is fine 

ClientOptions clientOptions = new ClientOptions(); 

clientOptions.Option1 = false; 
clientOptions.Option2 = true; 

s.Execute(clientOptions); // this causes the error 

总之,我为什么能实现自己的IOptions,当客户端在同一台计算机上的COM +应用程序,但使用它的COM +应用程序不是在客户端访问COM +通过另一个代理应用程序机?

看来,如果IOptions是由服务器创建的,那么它很好,但如果它是由客户端创建的,那么它不是。

任何帮助将不胜感激。

谢谢,

卡尔。

+0

我怀疑德克尔和287]莪是在正确的轨道与问候权限以来生效机器A正在执行从机器B的代码,但其访问权限设置是一个谜给我。 – Carl 2008-11-30 13:34:32

回答

1

尝试通过dcomcnfg.exe查看远程计算机上的COM服务器的远程激活权限(应打开MMC管理单元)。

-Oisin

2

我去推断与DCOM一些旧的经验,这可能会或可能不会有帮助。当您访问被拒绝时,您必须查看计算机B上的DCOM配置参数。

在较早的操作系统(Windows 2000)上,您将运行dcomcnfg。但在XP中,您从控制面板 - 管理工具运行组件服务。在Vista下,显然,你必须运行windows \ System32 \ comexp.msc。

当您处于组件服务管理中时,突出显示我的电脑并选择属性。你必须做的第一件事是在默认属性选项卡,单击此计算机上启用分布式COM。此外,您可能需要指定启动和激活访问权限COM安全标签。这样做时,您可能不得不同时处理编辑限制和编辑默认值?

请注意,我相信这些都是默认权限,因此您可能想找到你注册的COM +应用程序在应用程序列表和设置应用程序特定的访问权限,而不是机器范围的默认值。但我知道,你必须检查启用此计算机上分布式COM复选框。

我希望这会有所帮助。

相关问题