Службы компонентов COM+ C# Что-то не так?

Я пишу С# COM+ для другой DLL COM+. У него очень простой интерфейс, и я успешно протестировал его.

Я использую «компонентные сервисы» отчасти потому, что так делала старая система, а отчасти потому, что это кажется правильным.

У меня проблема в том, что когда я регистрирую устаревшую dll, путь к dll в свойствах - это ФАКТИЧЕСКАЯ dll, и она просто работает.

Когда я регистрирую свой путь к dll, это mscoree.dll, а не моя dll, и кажется, что я должен добавить свою dll в GAC? Я пробовал код для автоматического добавления его в кеш, но он не работает?

Кроме того, поскольку я использую вызов WCF с моим вызовом COM+, я сталкиваюсь с проблемой относительно того, где в настоящее время находится конфигурационная dll, похоже, что она ищет настройки в C:\Windows\system32\dllhost.exe.config.

Я бы хотел, чтобы он выглядел рядом с реальной dll? Я что-то упускаю?


person Jon H    schedule 18.10.2011    source источник
comment
Кстати, см. meta.stackexchange.com/questions/2950/   -  person John Saunders    schedule 18.10.2011


Ответы (1)


COM/COM+ — это неуправляемая технология. Он ничего не знает об управляемом коде .NET, поэтому регистрация вашей сборки .NET непосредственно в реестре COM не может работать. mscoree.dll — это библиотека размещения .NET, которая загружает управляемую среду выполнения и предоставляет неуправляемые интерфейсы для COM, которые требуются реестру COM. Когда активируется экземпляр компонентного класса COM, который реализует ваша сборка, COM+ сначала загружает mscoree, затем mscoree должен загрузить вашу сборку, чтобы подключить вашу реализацию к оболочке, вызываемой COM, которую mscoree представляет COM+.

Где mscoree ищет вашу сборку, чтобы загрузить ее, зависит от того, как вы ее зарегистрировали. Он следует обычным правилам проверки пути загрузчика .NET Fusion, что означает, что он обычно будет искать в GAC, если вы не указали кодовую базу во время регистрации (например, с помощью аргумента командной строки regasm /codebase).

Параметры конфигурации для управляемого кода ограничены AppDomain, и по умолчанию имя файла конфигурации для AppDomain получается путем добавления суффикса .config к пути исполняемого файла процесса, в котором размещается AppDomain. Ваш компонент размещен в COM+, поэтому он будет выполняться в процессе, который является экземпляром DllHost.exe. Таким образом, по умолчанию файл конфигурации для AppDomain вашего компонента будет называться DllHost.exe.config. Однако если вы укажете корневой каталог приложения для приложения COM+, это изменит расположение, в котором AppDomain ищет свою конфигурацию, на [COM+ Application Root Directory]\[COM+ Application Name].config.

person Chris Dickson    schedule 18.10.2011
comment
Хорошо, спасибо за вашу помощь. Я установил маршрут приложения (это на уровне приложения COM), а также следовал инструкциям здесь: blogs.msdn.com/b/ajit/ archive/2008/06/18/ но для конфига все равно идет dllhost. Какие-либо предложения? - person Jon H; 19.10.2011
comment
Взломал. Я запутался. вам нужен манифест И файл конфигурации, и они (кажется) должны называться application.config/manifest, и на самом деле это слово «приложение», а не имя вашего приложения. - person Jon H; 19.10.2011
comment
Укажите, где это необходимо, хотя я использовал следующие сайты: vasters.com/clemensv/ и msdn.microsoft.com/en-us/library/windows/desktop/ и упомянутый выше. - person Jon H; 19.10.2011
comment
Спасибо за ответ! У нас был компонент .NET COM, который изначально загружал application.config для своего файла конфигурации, но теперь внезапно начал искать «имя компонента COM» вместо этого. config, интересно, что могло на это повлиять. - person axk; 24.10.2016