很抱歉,如果这是一个有点长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是由服务器创建的,那么它很好,但如果它是由客户端创建的,那么它不是。
任何帮助将不胜感激。
谢谢,
卡尔。
我怀疑德克尔和287]莪是在正确的轨道与问候权限以来生效机器A正在执行从机器B的代码,但其访问权限设置是一个谜给我。 – Carl 2008-11-30 13:34:32