c# - COMException CreateInstance 发布失败

标签 c# visual-studio asp.net-web-api

我目前正在开发一个引用第三方 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/

相关文章:

visual-studio - 在单独的层中复制多个项目文件还是在创建Docker镜像时一次性复制多个项目文件更好?

c# - 如何将 DLL 从 .Net Framework 迁移到 .Net Standard?

c# - 为什么我的日期值在 web api 函数中解析不正确?

c# - 有没有办法确保 Orleans Grains 最终进入同一个筒仓

c# - 在 .NET 控制台客户端应用程序中使用 ASP.NET Core SignalR 从 Azure SignalR 接收消息

visual-studio - 如何删除另一个调试器以便 Visual Studio 可以调试脚本

.net - Visual Studio for ASP.NET Core 项目中的 "REST API Client"选项?

asp.net - 满足特定要求的应用程序 - ASP.NET MVC 4、EF 5、数据库优先、Web API

c# - 使用 RestSharp 发送 HTTP POST 多部分/表单数据字段

c# - Guid & GetHashCode 唯一性