我正在使用 Windows 7、VS2010、SqlServer 2008。
我的应用程序从第三方 dll(它从另一个必须在后台运行的进程中获取数据)获取数据并处理数据,然后通过 WCF 服务将其发送到前端。
应用程序已完成并执行它应该执行的操作。现在我想分发它并在 IIS 中运行它。我面临一个奇怪的问题。当我在 IIS 中运行该应用程序时,该应用程序从 dll 获取数据失败,并在连接到该 dll 时出错。
Retrieving the COM class factory for component with CLSID {FCEC6861-5866-4F9E9A09-7CC868C30A8B} failed due to the following error: 80070005 Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)).
经过一番研究后,我发现转到组件服务并在 DCOM 配置中将 dll 的安全性更改为每个人。错误停止。
但现在我没有得到错误,但我没有得到数据,就像关闭提供数据的软件一样。但是在我的 ASP.net 开发服务器上工作正常。
我还发现,当我以管理员模式运行 Visual Studio 时,我也必须以管理员模式运行第三方数据软件。
dll 引用不会自动复制到 bin 文件夹中,它放在 obj 文件夹中,我手动复制了它,但它不起作用。
最佳答案
我认为发生的情况是 COM 组件在与调用方相同的上下文中运行,它需要提升权限才能执行其工作。
所以:
- 管理员模式下的 VS 和管理员模式下的 COM 可以正常工作,因为两者都具有系统范围的权限来执行其工作。
- IIS 在应用程序池帐户下运行(不确定是哪个),COM 也将在该帐户下,但它不是管理员,因此权限太低无法正确完成工作。
我的故障排除建议是将运行您的应用程序的 IIS 应用程序池更改为本地管理员。如果一切正常,请将 DCOM 上的访问权限恢复为默认值(在更改为所有人之前)并重试。您也可以尝试在本地系统帐户下运行应用程序池,看看会发生什么。如果仍然有效,则您已确认此行为是问题所在。
关于c# - 使用 IIS 与第三方 dll 的 WCF 服务连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7899172/