Вне процесса COM-сервер работает нормально в модульном тесте, но не в реальном сервисе - PullRequest
1 голос
/ 01 июня 2011

У нас есть служба 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 я обнаружил, что это связано с:

  1. Вызов компонента MS Office
  2. Разрешения DCOM не настраиваются
  3. Разрешения файла NTFS, запрещающие чтение / выполнение доступа к идентификатору рабочего процесса IIS (ASPNET в моей среде)

Из них:

  1. Определенно не применимо
  2. Также не применимо; Я не размещаю EXE в DCOM или COM +, я просто активирую внепроцессную активацию COM
  3. Это выглядит вероятным; однако я проверил разрешения, и 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.

1 Ответ

2 голосов
/ 01 июня 2011

Ваша ошибка - исключение Несанкционированного доступа.Поэтому проблема, вероятно, связана с правами.

Вы можете проверить, каков контекст безопасности 32-битного рабочего процесса.

Также проверьте журнал событий, там может быть информация о том, какая учетная запись используется.

...