【问题标题】:Why do I get E_ACCESSDENIED calling a COM+ method from a proxy?为什么我得到 E_ACCESSDENIED 从代理调用 COM+ 方法?
【发布时间】:2008-11-29 18:19:08
【问题描述】:

对不起,如果这有点冗长...考虑一下:

我在名为 Company 的命名空间中有一个 COM+ 应用程序,它公开了一个名为 Server 的对象,该对象具有以下方法:

bool Server.Execute(IOptions options)

IOptions Server.CreateOptions()

IOptions 仅具有几个布尔读/写属性,如下所示:

IOptions.Option1 (bool)

IOptions.Option2 (bool)

我使用以下代码创建了一个客户端应用程序:

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

Company.IOptions serverOptions = s.CreateOptions();

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

s.Execute(serverOptions);

我在机器 A 上安装 COM+ 应用程序,然后在机器 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

总而言之,当客户端与 COM+ 应用程序在同一台机器上时,为什么我可以实现自己的 IOptions 并在 COM+ 应用程序中使用它,但当客户端通过另一台机器上的代理访问 COM+ 应用程序时却不能?

好像IOptions是服务端创建的就好了,但是如果是客户端创建的就不是了。

任何帮助将不胜感激。

谢谢,

卡尔。

【问题讨论】:

  • 我怀疑 Decker 和 Oisin 在权限方面处于正确的轨道,因为实际上机器 A 正在执行机器 B 的代码,但设置哪个访问权限对我来说是个谜。

标签: c# .net proxy com+ access-denied


【解决方案1】:

我将推断一些较早的 DCOM 经验,这些经验可能有用,也可能没有帮助。当您访问被拒绝时,您必须查看机器 B 上的 DCOM 配置参数。

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

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

请注意,我认为这些是默认权限,您可能希望在应用程序列表中找到您注册的 COM+ 应用程序并设置特定于应用程序的访问权限,而不是机器范围的默认值。但我知道您必须选中 在此计算机上启用分布式 COM 复选框。

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

    -奥辛

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 2021-05-07
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多