与IIS的第三方DLL的WCF服务连接

the*_*man 6 c# wcf

我正在使用Windows 7,VS2010,SqlServer 2008.

我的应用程序从第三方dll(它从另一个必须在后台运行的进程获取数据)中获取数据,并处理数据并通过WCF服务将其发送到前端.

应用程序已完成并完成它应该执行的操作.现在,当我想分发它并在IIS中运行它.我面临一个奇怪的问题.当我在IIS中运行它时,应用程序从dll获取数据它失败并在连接到dll时出错.

由于以下错误,检索具有CLSID {FCEC6861-5866-4F9E9A09-7CC868C30A8B}的组件的COM类工厂失败:80070005访问被拒绝.(来自HRESULT的异常:0x80070005(E_ACCESSDENIED)).

经过一些研究后我发现了组件服务,在DCOM配置中,我将dll的安全性改为每个人.错误停止了.

但是现在我没有得到错误,但是当提供数据的软件关闭时,我没有得到数据.但是我的ASP.net开发服务器可以正常工作.

另外我发现当我以管理员模式运行Visual Studio时,我也必须在管理模式下运行第三方数据软件.

dll引用不会自动复制到bin文件夹中,它放在obj文件夹中我手动复制它但它不起作用.

kro*_*ijk 1

我认为发生的情况是 COM 组件与调用者在相同的上下文中运行,并且需要提升的权限才能执行其工作。

所以:

  • VS 处于管理模式,COM 处于管理模式,可以正常工作,因为两者都具有系统范围的权限来执行其工作。
  • IIS 在应用程序池帐户下运行(不确定是哪个),COM 也将在该帐户下运行,但它不是管理员,因此权限太低,无法正确完成工作。

我的故障排除建议是将您的应用程序运行所在的 IIS 应用程序池更改为本地管理。如果效果正常,请将 DCOM 上的访问权限恢复为默认值(在更改为所有人之前),然后重试。您还可以尝试在本地系统帐户下运行应用程序池,看看会发生什么。如果仍然有效,则您已确认此行为是问题所在。