【发布时间】:2023-03-10 13:45:02
【问题描述】:
我正在使用 Windows 7、VS2010、SqlServer 2008。
我的应用程序从第三方 dll 获取数据(它从必须在后台运行的另一个进程获取数据)并处理数据并通过 WCF 服务将其发送到前端。
应用程序已完成并执行它应该执行的操作。现在,当我想分发它并在 IIS 中运行它时。我面临一个奇怪的问题。当我在 IIS 中运行应用程序时,应用程序从 dll 中获取数据,它失败并在连接到 dll 时出错。
检索具有 CLSID 的组件的 COM 类工厂 {FCEC6861-5866-4F9E9A09-7CC868C30A8B} 失败,原因如下 错误:80070005 访问被拒绝。 (HRESULT 的例外情况: 0x80070005 (E_ACCESSDENIED))。
经过一些研究,我发现要使用组件服务并在 DCOM 配置中将 dll 的安全性更改为每个人。错误停止。
但是现在我没有收到错误消息,但我没有像关闭提供数据的软件那样获得数据。但可以使用我的 ASP.net 开发服务器。
我还发现,当我在管理员模式下运行 Visual Studio 时,我也必须在管理员模式下运行第三方数据软件。
dll引用不会自动复制到bin文件夹中,它放在obj文件夹中,我手动复制了它,但它不起作用。
【问题讨论】:
-
我不确定向所有人提供访问权限是这里最明智的解决方案。您可能应该做的是确定该站点在 IIS 中运行的帐户,然后将第 3 方 DLL 的权限也授予该帐户。根据应用的性质,您甚至可以考虑创建一个服务帐户,将其分配给运行该应用的应用池,并为其授予适当的权限。
-
谢谢。我知道这不是一个好主意,我知道我想找出问题所在。尝试一切和任何事情:)