我目前正在开发一个引用第三方 api dll 的 C# WebAPI 项目。该组件是我添加到 visual studio 项目中的简单 COM 引用。
Web API 在 Intranet 服务器 (IIS) 上发布,集成安全和用户模拟已打开,匿名身份验证已关闭。
在我本地机器上的 visual studio (2015) 中运行 web api 时,一切正常。
在我们的 IIS 服务器上运行已发布的 web api 时,一切正常,但是当我向使用第三方库的 Controller 操作发送请求时,我收到以下错误:
System.Runtime.InteropServices.COMException
Additional information:
CreateInstance failed.
at ThirdPartyLib.Connect()
第三方依赖项是使用他们的安装程序安装在服务器(以及我的开发机器)上的。这注册了一组 dll 并安装了随附的软件。我已经验证了正确的安装。事实上,使用相同 dll 的简单 winforms 应用程序工作得很好。
进程监视器显示 w3wp.exe 正在使用正确的 dll。
我不确定我错过了什么?
如果这是权利问题,我将如何解决?
最佳答案
您可以将应用程序池标识更改为具有更高权限的用户。
注意:您可以使用 ASP.NET 模拟,通过 Web 配置以特定身份运行整个应用程序,或使用代码以使用特定身份仅运行部分代码。例如我测试了 <identity impersonate="true" userName="r.aghaei" password="mypassword"/>
获得文件系统权限并且它工作正常。只需注意 webconfig 或代码中的模拟,如果应用程序池用户有足够的权限允许模拟,就可以正常工作。有关如何使用模拟客栈配置或代码的更多信息,请参阅 this MSDN 知识库文章。
也不要忽视最小特权原则。
关于c# - COMException CreateInstance 发布失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532742/