2016-11-10 70 views
6

我目前正在開發一個引用第三方api dll的C#WebAPI項目。該組件是一個簡單的COM參考,我添加到Visual Studio項目中。
Web API發佈在具有集成安全性的Intranet服務器(IIS)上&用戶模擬處於打開狀態,匿名auth關閉。COMException CreateInstance在發佈時失敗

在我的本地機器上運行Visual Studio(2015)中的web api時,一切正常。

當運行我們的IIS服務器上的發佈的Web API,一切都還正常工作,但是當我發送到使用第三方庫中的控制器動作的請求,我收到以下錯誤:

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

的第三方依賴關係安裝在服務器(以及我的開發機器)上使用他們的安裝程序。這注冊了一套dll並安裝了附帶的軟件。我已經驗證了正確的安裝。實際上,使用相同dll的簡單winforms應用程序工作得很好。

進程監視器顯示w3wp.exe正在使用正確的dll。

我不確定我錯過了什麼?
如果這是一個權利問題,我將如何去解決它?

+0

該項目是否有足夠的權利訪問該DLL? – Steve

+0

我不知道如何找出答案。 UAC已關閉。這是一個使用集成安全性的Intranet服務器,因此當我訪問它時,我的帳戶正在被模擬。 – Bart

+0

「安裝」是什麼意思?它是否被註冊? 「我有一個C#web API項目」是什麼意思?你有源代碼嗎?你如何調用COM組件?你有什麼嘗試?你運行進程監視器,看看它試圖從哪裏加載DLL? –

回答

2

您可以將Application Pool Identity更改爲具有更高權限的用戶。

注意:您可以使用ASP.NET模擬使用Web配置運行具有特定身份的整個應用程序或使用代碼使用特定身份運行部分代碼。例如,我測試<identity impersonate="true" userName="r.aghaei" password="mypassword"/>獲得文件系統許可,並且它正常工作。只要在webconfig或代碼中注意模擬,只要應用程序池用戶有足夠的權限來允許模擬就行。有關如何使用模擬客棧配置或代碼的詳細信息,請參閱thisMSDN知識庫文章。

也不要忽視最小特權主體。