2012-01-18 3 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 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" 
    
Смежные вопросы