Ошибка Server.CreateObject при создании компонента COM + из классического ASP в IIS 7

У меня есть классическое приложение ASP, работающее на IIS 7 в Windows Server 2008 R2 Standard.

Однажды он работал нормально, когда внезапно, без каких-либо изменений кода, он начал выдавать следующую ошибку при создании экземпляра компонента COM +:

MyObject = Server.CreateObject("MyCustomComponent.MyCustomObject")

Ошибка объекта сервера 'ASP 0177: 80004005'

Ошибка Server.CreateObject

/path/script.asp, строка xx

80004005

В чем может быть проблема? Я поискал в Интернете и нашел десятки возможных ответов, ни один из которых, похоже, не имеет ничего общего с проблемой. Я знаю, что использую правильное имя объекта - совсем недавно он работал. Ничего не изменилось! Я потратил почти 2 часа, пытаясь понять это, и пришел с пустым.


person ErikE    schedule 19.03.2013    source источник


Ответы (1)


Устранение общих неисправностей ошибки 80004005

Эту ошибку сложно устранить из-за огромного количества возможных причин. Быстрый поиск в Интернете дает массу предложений.

Ключевым аспектом здесь для сужения возможной проблемы до разумного списка является то, что код работал и внезапно начал давать сбой, без каких-либо изменений кода. При отсутствии серьезных изменений конфигурации IIS или COM это исключает возможность, например, использования неправильного имени класса для компонента или неправильной регистрации компонента. Вместо этого следует обратить внимание на некоторую конфигурацию самих IIS и COM, которая может допускать несогласованное поведение без изменения настроек.

  • Просмотрите все изменения разрешений учетной записи пользователя для пользователя, имеющего доступ к сайту, пользователя, настроенного для работы IIS, или учетной записи пользователя, которую компонент COM настроен на олицетворение.
  • Просмотрите пулы приложений, установленные для сайта или приложения в IIS.
  • Просмотрите любой код разрешений / аутентификации / олицетворения в вашем коде ASP.
  • Просмотрите настройки самого COM-компонента.

Актуальная проблема

В конечном итоге проблема сводилась к тому, что несколько сайтов и приложений IIS, каждое в отдельных пулах приложений IIS, использовали один и тот же компонент COM. Само по себе это не проблема, за исключением того, что компонент COM был настроен на одновременный доступ к нему не более 1 пула приложений.

Причина, по которой страница какое-то время работала, заключалась в том, что ей удалось первой захватить компонент COM. Другой пул сайтов / страниц / приложений, использующий тот же компонент COM, не смог бы получить к нему доступ. Поскольку компонент COM был настроен на выпуск через 3 минуты, это давало возможность другой странице при посещении «ухватиться» за нее и предотвратить ее использование на новой тестируемой странице.

Исправление

Вот подробные инструкции по увеличению лимита пула приложений COM-компонента в Windows Server 2008:

  1. Перейдите в Панель управления> Администрирование> Службы компонентов.

  2. В дереве перейдите через «Службы компонентов»> «Мой компьютер»> «Приложения COM +» и найдите свой настраиваемый компонент.

  3. Щелкните компонент правой кнопкой мыши и получите Свойства.

  4. На вкладке свойств Pooling & Recyling установите для параметра Pool Size значение больше 1, чтобы соответствовать количеству потенциальных пулов приложений, которые будут одновременно обращаться к компоненту из IIS или из других источников.

    COM + объединение в пул и повторное использование

  5. Попробуйте еще раз свою веб-страницу, и вуаля, она снова работает!

person ErikE    schedule 19.03.2013