Зарегистрируйте COM .dll в IIS7.5 (REGDB_E_CLASSNOTREG) - PullRequest
2 голосов
/ 13 августа 2011

Эта проблема сводит меня с ума.У меня есть служба WCF, которая использует COM .dll (которая находится в SysWOW64) для выполнения некоторых операций.Я зарегистрировал его в Windows 2008 R2, но он не работает, когда служба развернута на сервере.Мой сервис скомпилирован для "любого процессора".

Когда я создаю консольное приложение, оно работает нормально.Что я делаю неправильно?Это вопрос разрешения?Я изменил пользователя из пула приложений на администратора, но тоже не работает.Когда я пытаюсь изменить пул на 32-битные приложения, происходит сбой пула или истекает срок службы.

Сообщение об ошибке:

System.Runtime.InteropServices.COMException: Retrieving the COM class factory for component with CLSID {47E736CA-3EEA-11D5-8400-00A0C9CA15AD} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

Может кто-нибудь указать мнеправильное направление?

1 Ответ

4 голосов
/ 13 августа 2011

Это потому, что ваша COM DLL является 32-битной. SysWOW64 предназначен для 32-битных компонентов в 64-битной Windows. Ваше консольное приложение работает, потому что оно создается как x86 (проверьте свойства проекта), но пул приложений IIS является 64-разрядным.

Вам необходимо создать новый пул приложений в IIS, перейти к Advanced Properties и установить Enable 32-Bit Applications в True. Это создаст вам 32-битный пул приложений, и ваша COM-библиотека будет найдена.

...