Классический ASP с использованием COM +.Net Interop 64-битный Windows Server 2008 IIS 7 Server.CreateObject Fails

У меня возникла проблема, связанная с выполнением dll.Net из классического приложения asp на 64-битном сервере Windows Server 2008 с IIS7. Ситуация такова:

Я написал сборку .Net С# для выполнения некоторых задач шифрования. Эта сборка стала доступной для классической среды ASP через наследование с ServicedComponent, гарантируя, что файл assemblyinfo имеет атрибут ComVisible (true), и он был установлен с использованием командной строки "regsvcs".

При тестировании на моем собственном рабочем столе (XP с IIS6) все работало нормально. При переходе на IIS 7, Windows Server 2008 я получаю печально известный "ASP 0177 Server.CreateObject".

Я пробовал следующее безрезультатно:

  • Обеспечение функций ASP и Script Extension были установлены на сервере, так как это не по умолчанию для IIS7. Это позволило мне выполнить простые ASP-команды, но не server.createobject для сборки .net.
  • Включено Поддержка 32-разрядных приложений для пула приложений, поддерживающего классический сайт asp
  • Используемый NetworkService как идентификатор для пула приложений, поддерживающего классический сайт asp
  • Пробовал зарегистрировать dll с помощью regsvr32, который потерпел неудачу
  • Я могу создать другие объекты, такие как "scripting.filesystemobject"
  • Перемещение dll в каталог wow64, а затем с помощью regsvcs для их регистрации.
  • И да, когда я выполняю команды regsvcs, они были из командной строки, запущенной с помощью администратора "RunAs". Команды regsvcs успешно зарегистрировались из 64 и 32-битных версий. Однако, когда он используется в классическом приложении asp, он терпит неудачу.

Этот вопрос тесно связан с этим. Однако, я думаю, этот вопрос был больше связан с использованием инструментов на сервере, а не с программной проблемой, подобной моей.

У кого-нибудь есть еще идеи попробовать?

Ответ 1

После большой помощи здесь и еще нескольких исследований мы наконец наткнулись на ответ. Чтобы решить проблему, мы сделали следующее:

  • Больше не наследуется от ServiceComponent (это нормально, поскольку мы фактически не используем какие-либо специфические функции COM +)
  • Для установки компонента использовались следующие команды, которые необходимо выполнить в следующем порядке:

    gacutil/i "C:\Inetpub\wwwroot\ASPTest * имя dll *"

    regasm/tlb "C:\Inetpub\wwwroot\ASPTest * имя dll *"

Этот процесс устранил исходные ошибки и также имел дополнительное преимущество, заключающееся в возможности замены dll во время работы IIS.

Ответ 2

Попробуйте это

Службы компонентов → Компьютеры → Мой компьютер → Приложения COM +

Откройте объект COM + Application.

Откройте компоненты.

Щелкните правой кнопкой мыши класс и выберите "Свойства".

В разделе "Дополнительно" есть флажок "Разрешить встроенные свойства IIS".

Это работает для меня

Ответ 3

Создайте тестовый файл vbs и попробуйте создать там COM-объект. Если вы не можете (то есть получите ту же ошибку), то ваш компонент зарегистрирован неправильно. Если вы можете - тогда он был установлен правильно, и проблема связана с отсутствием разрешений для учетной записи, в которой выполняется ваше приложение в IIS.