我正在使用 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文件夹中,我手动复制它,但它不起作用。
我认为发生的情况是 COM 组件与调用者在相同的上下文中运行,并且需要提升的权限才能执行其工作。
So:
- VS 处于管理模式,COM 处于管理模式,可以正常工作,因为两者都具有系统范围的权限来执行其工作。
- IIS 在应用程序池帐户下运行(不确定是哪个),COM 也将在该帐户下运行,但它不是管理员,因此权限太低,无法正确完成工作。
我的故障排除建议是将您的应用程序运行所在的 IIS 应用程序池更改为本地管理。如果效果正常,请将 DCOM 上的访问权限恢复为默认值(在更改为所有人之前),然后重试。您还可以尝试在本地系统帐户下运行应用程序池,看看会发生什么。如果仍然有效,则您已确认此行为是问题所在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)