У меня есть приложение COM +, которое было экспортировано в MSI с использованием служб компонентов, а затем установлено на тестовом сервере. Веб-приложение (ASP) не может создать экземпляр объекта, который оно использует, из приложения COM +.
Приложение COM + состоит из трех DLL, встроенных в VB6. Существует одна DLL для данных, приложений и уровней представления. Веб-приложение использует только объекты из уровня представления. DLL-библиотеки COM + вызывают пару DLL-файлов .NET, предоставляемых через COM.
При запуске веб-приложения возвращается HTTP 500 - Internal Server Error
. В приложении или системном журнале отсутствуют ошибки.
Я попытался создать экземпляр объекта из VBScript, используя WSH.CreateObject
, и он работает только для объектов в слое данных. При попытке создать объект на уровне приложения или презентации я получаю следующую ошибку:
Error: Could not create object named "My.ProgId"
Code: 800A801D
Source: WScript.CreateObject
Поскольку он не работает с VBScript, я подозреваю, что с приложением ASP все в порядке и проблемы возникают именно с приложением COM +.
Дополнительная информация
Если я удаляю приложение COM + и пытаюсь запустить мой VBScript для проверки его реализации, я получаю другую ошибку.
Error: Could not locate automation class named "My.ProgId"
Code: 80020009
Source: WScript.CreateObject
Поскольку ошибки различаются, кажется, что COM, по крайней мере, находит объекты COM + при их установке, он просто не может их создать.
Я также пытался отслеживать сценарий с помощью ProcessMon. Я вижу WScript.exe (через COM), запрашивающий реестр для ProgID, а затем CLSID. В конце концов путь к DLL возвращается, а затем svchost.exe и dllhost.exe запрашивают в реестре ту же информацию, используя CLSID, а также возвращают путь к DLL. В конце концов DLL выполняет операцию Load Image против нее, за которой следует то же самое для msvbvm60.dll. Я не вижу ничего, что указывало бы на сбой доступа к COM + DLL.
Я сейчас попробовал установить приложение COM + на другой сервер Win2k3 и рабочий стол Windows XP. Я получаю тот же результат, имея возможность создавать экземпляры объектов из DLL уровня данных, но не из DLL уровня приложения и уровня представления. Я также попытался получить старую копию библиотеки прикладного уровня и Я смог успешно создать из нее объекты. Однако когда я сравниваю файлы проекта для двух разных версий, ничто не выделяется в качестве возможной причины этой проблемы.