我正在使用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文件夹中我手动复制它但它不起作用。
答案 0 :(得分:1)
我认为发生的事情是COM组件在与调用者相同的上下文中运行,并且需要提升的权限才能执行其工作。
所以:
我的问题排查建议是将您的应用运行的IIS应用程序池更改为本地管理员。如果可行,请将DCOM上的访问权限恢复为默认值(在更改为所有人之前),然后重试。您可能还尝试在本地系统帐户下运行应用程序池以查看会发生什么。如果仍然有效,您已确认此行为是问题。