在不同分区中激活COM+对象

51

我创建了一个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”。可能还没有注册适当的通道。

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


1
你是想激活一个本地的(意思是不是.NET)COM+组件,还是我们正在谈论一个ServicedComponent(为CLR编写,即使使用了COM+基础架构进行发布)? - gsscoder
直到您提供此详细信息。您可以参考另一个问题:http://stackoverflow.com/questions/12637878/how-can-i-instantiate-a-com-class-interface-generically,以及Marshal.BindToMoniker MSDN文档(http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.bindtomoniker.aspx)。 - gsscoder
为了确保,您可以尝试以更高的权限(作为管理员)运行代码,如果它可以工作,那么可能是因为您正在使用过低的权限运行。 - gsscoder
你是否在组件服务中为COM+应用程序授予了足够的权限? - Adi
你尝试过创建对象的实例吗?https://dev59.com/K0bRa4cB1Zd3GeqPzl1M - HaniGamal
1
很抱歉没有回应你们的建议,因为我采取了完全不同的方法。需要许多不同COM+分区背后的想法是为了实现多个服务器配置,例如:数据库、安全性等,客户端通过选择适当的服务器来决定他需要哪种配置文件。我采取的解决方案是在每次调用时从客户端通过通信渠道静默地发送配置文件标识,服务器拦截它并采取正确的路线。 - Khaled Saleh
1个回答

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"
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接