2012-01-18 31 views
51

我創建了一個COM +域分區,然後將其映射到Windows 2008服務器計算機並將COM +應用程序導入到其中。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'分區:{41e90f3e-56c1-4633-81c3-6e8bac8bdd70}/new:MyObject'。一個合適的頻道可能尚未註冊。

有沒有人知道如何完成這樣的激活?

+1

你們是不是要激活本地(在這個意義上沒有.NET)COM +組件或我們正在談論一個ServicedComponent的(對於CLR寫的:你可以做到這一點使用命令行使用COM +基礎設施)? – gsscoder

+0

直到你給出這個細節。你可以參考這個其他問題: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

+1

CLR ServicedComponent – Solid

回答

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"