2009-01-16 2 views
0

Этот вопрос является продолжением ответа Марка Гравелла на мой вопрос Create Out-Of-Process COM in C#/.Net ?. Я выбрал его предлагаемое решение, но теперь у меня другая проблема.Как получить доступ к COM-объекту .Net, размещенному на сервере COM + в .NET?

Вот моя ситуация:

  • я реализовал «DataProvider» COM-компонент в C#
  • Этот компонент размещается в COM + приложения сервера, так что несколько процессы могут получить доступ к той же экземпляр DataProvider
  • Типы процессов, которые могут обращаться к поставщику данных через COM, - это скрипты Matlab, VB и .Net.

При создании экземпляра COM DataProvider из Matlab или VB Script запускается механизм COM +, и я могу проверить, что можно использовать один экземпляр DataProvider.

Проблема возникает, когда я пытаюсь получить доступ к управляемому экземпляру COM + из .Net. В принципе, когда COM-компонент основан на DLL .Net, даже при ленивой загрузке, .Net всегда, кажется, находит DLL и создает экземпляр объекта оттуда, пропуская весь COM-механизм. Это ожидается для выступлений, но это не помогает в моем случае.

Сейчас на вопрос: Возможно ли создать экземпляр .Net написанного COM-компонента в приложении .Net с использованием COM-механизма?

Обратите внимание, что следующий код не использует COM механизм:

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

ответ

0

Посмотрите в this answer. Сначала сборка должна быть добавлена ​​в GAC, а затем приложение COM + должно быть создано с помощью утилиты regsvcs. В противном случае .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 
Смежные вопросы