У нас есть служба WCF, размещенная в IIS, которая в настоящее время вызывает библиотеку VB6 для выполнения части своей работы. Это прекрасно работает, но мы не можем развернуть службу в 64-разрядной целевой среде, не настроив IIS для ее запуска в 32-разрядном рабочем процессе.
В настоящее время я изучаю способы обойти это ограничение. Перенос библиотеки DLL VB6 в .NET невозможен по разным причинам, поэтому я создал оболочку ActiveX EXE вокруг библиотеки DLL в VB6, чтобы служба могла работать в 64-битной среде, а части VB6 - в 32-битной.
Когда я тестировал сервис, я получил эту ошибку:
Type: System.UnauthorizedAccessException
Message: Retrieving the COM class factory for component with CLSID {9AE7303B-D159-43F6-B1A5-52D297581820} failed due to the following error: 80070005.
После некоторого поиска в Google я обнаружил, что это связано с:
- Вызов компонента MS Office
- Разрешения DCOM не настраиваются
- Разрешения файла NTFS, запрещающие чтение / выполнение доступа к идентификатору рабочего процесса IIS (
ASPNET
в моей среде)
Из них:
- Определенно не применимо
- Также не применимо; Я не размещаю EXE в DCOM или COM +, я просто активирую внепроцессную активацию COM
- Это выглядит вероятным; однако я проверил разрешения, и NTFS сообщает, что группа
Users
(членом которой является ASPNET
) действительно имеет доступ для чтения / исполнения к файлу
Я пытался вызвать EXE из устройства модульного теста, который выполняется в моей учетной записи уровня администратора, а не в учетной записи рабочего процесса IIS, и это работало нормально, поэтому ошибка определенно что-то , чтобы сделать с разрешениями. Я не уверен, что делать дальше. Кто-нибудь может подсказать, что я могу проверить?
Моя тестовая среда - Windows XP / IIS 5.1
UPDATE:
Виртуальный каталог IIS настроен для доступа Anonymous + Windows; служба WCF использует только анонимную проверку подлинности, проверка подлинности Windows - для отладчика VS. Диспетчер задач сообщает, что процесс aspnet_wp.exe
определенно выполняется в учетной записи ASPNET
.
Я явно предоставил доступ на чтение и выполнение к учетным записям ASPNET
и IUSR_<machine>
на всех задействованных COM-файлах и библиотеках. Это не имеет значения.
Я явно предоставил право локального запуска и локальной активации для учетных записей ASPNET
и IUSR_<machine>
на соответствующих интерфейсах в конфигурации DCOM. Это тоже не имело значения.
На мой взгляд, у меня есть 3 варианта:
- Продолжайте пытаться заставить это работать как-то.
- Пройдите всю свинью и разместите EXE в COM +.
- Сдайся. Сообщите пользователям, что служба WCF должна быть настроена для работы в 32-разрядном пуле приложений в 64-разрядной Windows.