如何访问.Net中COM +服务器中托管的.Net COM对象?

时间:2009-01-16 17:54:47

标签: com com+

这个问题是Marc Gravell对我的问题Create Out-Of-Process COM in C#/.Net ?给出的答案的后续跟进。我已经选择了他提出的解决方案,但现在正在运行另一个问题。

以下是我的情况:

  • 我在C#
  • 中实现了一个“DataProvider”COM组件
  • 此组件托管在COM +中 服务器应用程序使多个 进程可以访问相同的进程 DataProvider的实例
  • 可以通过COM访问数据提供程序的进程类型是Matlab,VB脚本和.Net应用程序。

当从Matlab或VB Script实例化COM DataProvider时,COM +机制启动,我可以验证是否可以使用DataProvider的单个实例。

当我尝试从.Net访问COM +托管实例时出现问题。基本上,当COM组件基于.Net DLL时,即使使用延迟加载,.Net也总是会找到DLL并从那里实例化对象,跳过整个COM机制。这是预期的表演,但在我的情况下没有用。

现在提出问题: 是否可以使用COM机制在.Net应用程序中实例化.Net编写的COM组件?

请注意,以下代码不使用COM机制:

    Type type = Type.GetTypeFromProgID(progID);
    return Activator.CreateInstance(type);

1 个答案:

答案 0 :(得分:0)

查看this answer。必须首先将程序集添加到GAC,然后必须使用regsvcs实用程序创建COM +应用程序。否则,.Net根本不会查看COM +目录:

"c:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe" MyObject.dll
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools\gacutil.exe" /i MyObject.dll