2012-01-18 14 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

あなたがCOM +コンポーネント(センスない.NETで)ネイティブを活性化しようとしているか、我々は公表されていてもCLRのために書かれたのServicedComponent(の話をしている:あなたは、コマンドラインを使用してこれを行うことができますCOM +インフラストラクチャを使用して)? – gsscoder

+0

あなたがこの詳細を与えるまで。この他の質問を参照することができます:http://stackoverflow.com/questions/12637878/how-can-i-instantiate-a-com-class-interface-genericallyまたMarshal.BindToMonikerにMSDN doc(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" 
    
関連する問題