2016-11-10 2 views
6

В настоящее время я разрабатываю проект C# WebAPI, который ссылается на стороннюю api dll. Компонент - это просто ссылка COM, которую я добавил в проект визуальной студии.
Веб-API опубликован на сервере интрасети (IIS) со встроенной защитой & пользовательская олицетворение включена, анонимный аут выключен.COMException CreateInstance не удалось опубликовать

При работе с веб-api в visual studio (2015) на моей локальной машине все работает отлично.

При запуске опубликованного Web API на нашем сервере IIS, все прекрасно работает, однако, когда я отправить запрос на действие контроллера, который использует библиотеку третьей стороны, я получаю следующее сообщение об ошибке:

System.Runtime.InteropServices.COMException
Additional information:
CreateInstance failed.
at ThirdPartyLib.Connect()

The сторонняя зависимость была установлена ​​на сервере (а также на моей машине dev) с помощью их установщика. Это зарегистрировало набор DLL и установил сопутствующее программное обеспечение. Я проверил правильную установку. На самом деле простое приложение winforms, использующее одну и ту же DLL, отлично работает.

Монитор процесса показывает, что w3wp.exe использует правильную dll.

Я не уверен, что мне не хватает?
Если это проблема с правами, как я могу ее решить?

+0

Имеет ли проект достаточное право доступа к dll? – Steve

+0

Я не знаю, как это узнать. UAC выключен. Это сервер интрасети, использующий встроенную защиту, поэтому моя учетная запись олицетворяется при доступе к ней. – Bart

+0

Что означает «установлен»? Это зарегистрировано? Что означает «Я имею проект веб-API C#»? У вас есть исходный код? Как вы называете COM-компонент? Что вы пробовали? Вы запустили Process Monitor, чтобы посмотреть, где он пытается загрузить DLL? –

ответ

2

Вы можете изменить идентификатор пула приложений для пользователя с более высокими разрешениями.

Примечание: Вы можете использовать олицетворение ASP.NET с помощью веб-конфигурации для запуска всего приложения с определенной идентификационной информацией или с помощью кода для запуска только части кода с использованием определенной идентификации. Например, я протестировал <identity impersonate="true" userName="r.aghaei" password="mypassword"/> для разрешения файловой системы и работал правильно. Просто выполняйте олицетворение внимания в webconfig или в коде, просто работает, если пользователь пула приложений имеет достаточные права для разрешения олицетворения. Для получения дополнительной информации о том, как использовать конфигурацию или код инсайдерской сети, см. Статью this MSDN KB.

Также не пренебрегайте наименьшей привилегией.

Смежные вопросы