Классический 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.