【发布时间】: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