'80040154 Класс не зарегистрирован' с interop от ASP.NET

Я получаю следующую ошибку на компьютере под управлением Windows XP Pro SP2 x64 с IIS6:

System.Runtime.InteropServices.COMException: 
Retrieving the COM class factory for component with CLSID
{3C250CBD-6CC9-11D2-9457-00004B48467E} failed due to the following error:
80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Это происходит при попытке создать экземпляр COM-объекта взаимодействия.

Как ни странно, это прекрасно работает из консольного приложения, работающего под той же учетной записью, что и пул приложений (пользователь в AD). То есть оба используют UserX, поэтому это не похоже на очевидную проблему с разрешениями.

У кого-нибудь было что-то подобное?

Ответ 1

Убедитесь, что ваш пул приложений либо 32-разрядный (или поддерживает 32-разрядные приложения), либо ваш COM-контроль поддерживает 64-разрядные приложения. Скорее всего, ваша собственная библиотека COM 32-битная, и ваш пул по умолчанию работает 64-разрядным рабочим, который не может загрузить 32-битную COM-dll.

Ответ 2

если он работает под IIS, действительно ли он использует "UserX" или использует "Guest", "ASP.NET" или "IWAM_USER" или аналогичную другую учетную запись. Кроме того, если он вызывается из IIS, вам может потребоваться проверить разрешения... не только на уровне файла, но и на уровне конфигурации COM-устройства.

В прошлый раз мне пришлось иметь дело с этим, я бы сделал

START → RUN → DCOMCNFG

или просто вызвать службы компонентов.

Затем разверните компонент Component Services → Computers → My Computer → DCOM Config и затем прокрутите вниз до объекта COM, который вы пытаетесь использовать. Щелкните правой кнопкой мыши на нем, и есть несколько абс... Идентичность - это та, которая будет запущена как.. вы можете переопределить это, чтобы указать конкретному пользователю "обходить" предполагаемый "по умолчанию". ТОЛЬКО ДЛЯ ИСПЫТАНИЙ, я бы установил его с менее ограничительной учетной записью (мощный пользователь, не обязательно администратор, но попробуйте последний) и посмотрим, поможет ли это.

Кроме того, на вкладке "Безопасность" есть параметры для тех, кто может запускать/активировать, и кто может "получить доступ" к нему. вам может потребоваться убедиться, что ваша учетная запись действительна в пределах этого.