【问题标题】:COM+ object activation in a different partition不同分区中的 COM+ 对象激活
【发布时间】:2012-02-13 13:40:19
【问题描述】:

我创建了一个 COM+ 域分区,然后将其映射到 Windows 2008 服务器计算机,并将 COM+ 应用程序导入其中。

我尝试使用以下 C# 代码从服务器上的特定分区远程激活对象:

//partition guid
Guid guidMyPartition = new Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70");
//parition moniker
string uri= "partition:{" + guidMyPartition + "}/new:MyObject";
Type t = Type.GetTypeFromProgID("MyObject", "MyServer");
MyObject obj = (MyObject)Activator.GetObject(t, uri);

但我得到了这个例外:

无法创建通道接收器以连接到 URL 'partition:{41e90f3e-56c1-4633-81c3-6e8bac8bdd70}/new:MyObject'。可能尚未注册合适的频道。

有人知道如何完成这样的激活吗?

【问题讨论】:

  • 您是在尝试激活本机(在某种意义上不是 .NET)COM+ 组件,还是我们在谈论 ServicedComponent(为 CLR 编写,即使使用 COM+ 基础架构发布)?
  • 直到你给出这个细节。您可以参考这个其他问题:stackoverflow.com/questions/12637878/… 以及 Marshal.BindToMoniker MSDN 文档 (msdn.microsoft.com/en-us/library/…)。
  • 只是为了确定。您可以尝试以更高的权限(以管理员身份)运行您的代码,如果它有效,则可能是您以太低的权限运行。
  • 您是否在组件服务中为 COM+ 应用授予了足够的权限?
  • 抱歉,由于我采用了完全不同的方法,所以没有回应您的建议。需要许多不同的 COM+ 分区背后的想法是启用多个服务器配置,例如:数据库、安全性等,因此客户端通过选择合适的服务器来决定他需要什么配置文件,我采取的解决方案是通过通信发送配置文件身份每次调用时,从客户端到服务器的通道都是静默的,服务器会拦截它并采取正确的路由。

标签: c# com multiple-instances activation moniker


【解决方案1】:
  1. 确保您的 Com 是公开且可见的。为此,请添加这些 标记到您的 Com 类:

    [ClassInterface(ClassInterfaceType.AutoDual)]
    [Guid("41E90F3E-56C1-4633-81C3-6E8BAC8BDD70")]
    [ProgId("..........")]
    [ComVisible(true)] 
    public class MyCom
    {
    
  2. 确保您的 COM 已注册。您可以使用命令行执行此操作:

    C:\WINDOWS\Microsoft.Net\Framework\v4.0.30319\regasm "C:\.......\xxx.dll"
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 2018-11-20
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    相关资源
    最近更新 更多