Активация объекта COM+ в другом разделе

Я создал раздел домена COM+, затем сопоставил его с сервером Windows 2008 и импортировал в него приложение COM+.

Я попытался использовать следующий код С# для удаленной активации объекта из этого конкретного раздела на сервере:

//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. Соответствующий канал, вероятно, не зарегистрирован.

Кто-нибудь знает, как такая активация может быть выполнена?


person Khaled Saleh    schedule 18.01.2012    source источник
comment
Вы пытаетесь активировать собственный (в смысле не .NET) компонент COM+ или мы говорим о ServicedComponent (написанном для CLR, даже если он опубликован с использованием инфраструктуры COM+)?   -  person gsscoder    schedule 09.01.2013
comment
Пока вы не дадите эту деталь. Вы можете обратиться к этому другому вопросу: stackoverflow.com/questions/12637878/, а также документ MSDN Marshal.BindToMoniker (msdn.microsoft.com/en-us/library/).   -  person gsscoder    schedule 09.01.2013
comment
Просто чтобы убедиться. Вы можете попробовать запустить свой код с более высокими привилегиями (как администратор), если он работает, возможно, вы используете слишком низкие привилегии.   -  person gsscoder    schedule 20.01.2013
comment
вы предоставили достаточно прав для приложения COM+ в службах компонентов?   -  person Adi    schedule 02.02.2013
comment
Вы пытались создать экземпляр объекта? stackoverflow .com/questions/485000/   -  person HaniGamal    schedule 18.02.2013
comment
Извините, ребята, что не ответил на ваши предложения, так как я пошел к совершенно другому подходу. Идея, стоящая за необходимостью множества различных разделов COM+, заключалась в том, чтобы включить несколько конфигураций сервера, таких как: база данных, безопасность и, таким образом, клиент решает, какой профиль конфигурации ему нужен, выбирая правильный сервер, решение, которое я принял, заключалось в отправке идентификатора профиля конфигурации через связь канал от клиента к серверу с каждым звонком молча, сервер его перехватывает и выбирает правильный маршрут.   -  person Khaled Saleh    schedule 23.07.2013


Ответы (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"
    
person mtz1406    schedule 19.02.2013