Исключение COM 0x8004005

У меня есть веб-служба C#, которая вызывает COM-объекты для доступа к системе обработки изображений FileNet. Служба иногда сталкивается со следующей ошибкой при вызове COM-объектов FileNet:

System.Runtime.InteropServices.COMException (0x80040005): необходимо запустить объект для выполнения этой операции (исключение из HRESULT: 0x80040005 (OLE_E_NOTRUNNING))

Любая идея о том, что это значит, или как устранить неполадки? Я почти ничего не нашел при поиске в Google, и мой опыт работы с COM очень ограничен. Благодарю.

2 ответа

К сожалению, HRESULT - это код ошибки "Что-то пошло не так". Я бы предложил:

  1. Проверьте системные журналы и журналы событий приложений, чтобы увидеть, не регистрируются ли какие-либо сообщения об ошибках.
  2. Проверьте любые журналы ошибок конкретного приложения для вашего компонента COM

Если ни один из них не пролил больше света на то, что идет не так, вы можете рассмотреть возможность добавления вашей сборки COM в пакет служб компонентов. Это должно позволить вам выключить его и перезапустить намного легче без перезагрузки системы.

В зависимости от ОС (это от Windows 7, но большинство из них похожи):

  1. Запустите службы компонентов (обычно в разделе "Администрирование")
  2. Развернитесь до Службы компонентов, Компьютеры, Мой компьютер, Приложения COM+.
  3. Щелкните правой кнопкой мыши, чтобы добавить новое приложение.
  4. Выберите, чтобы создать пустое приложение. Это позволит вам выбрать, какие компоненты COM вы хотите запустить здесь.
  5. Дайте приложению имя
  6. Если вы не знаете много о вашем COM-компоненте, я бы порекомендовал выбрать приложение сервера для запуска. Это запустит его вне процесса для звонящего. Если это не работает (например, сбой вызовов и т. Д.), Удалите это приложение и попробуйте снова как приложение библиотеки.
  7. Выберите учетные данные для службы. Сетевой сервис, вероятно, самый безопасный выбор (например, наименьшее количество разрешений), но я понятия не имею, каковы ваши требования. Вам может потребоваться предоставить учетную запись домена или LocalSystem, если она обращается к оборудованию или другим подобным вещам.
  8. Завершите работу мастера (вам может понадобиться вернуться к ним, если вам нужно больше контроля).
  9. Разверните новое приложение и найдите папку "Компоненты".
  10. Щелкните правой кнопкой мыши и выберите "Новый компонент".
  11. Если элементы управления COM уже зарегистрированы, выберите Импортировать компоненты. Если нет, выберите Установить компоненты
  12. Теперь выберите компоненты, которые вам нужны. Обратите внимание, что довольно важно поместить все взаимосвязанные компоненты в одно приложение. В противном случае старые сборки COM вряд ли будут работать правильно
  13. Завершите работу мастера. Если вы вернетесь к уровню приложения COM+ в древовидном представлении, вы должны увидеть новое приложение с неанимированным значком.

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

Существует множество параметров конфигурации, связанных с временем замедления и пулированием, что может помочь вам, например, если вы обнаружите, что COM DLL вызывает проблемы только через определенный промежуток времени.

Если проблема действительно периодическая, иногда возникает на одной машине, а иногда нет - вы могли бы написать свой код, чтобы перехватить ошибку, и повторить попытку.

Если есть машины, на которых он никогда не работает, это может быть связано с какой-то другой проблемой, например, UAC, или с неправильной установкой компонента.

Другие вопросы по тегам