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

时间:2011-10-26 06:03:53

标签: c# wcf

我正在使用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文件夹中我手动复制它但它不起作用。

1 个答案:

答案 0 :(得分:1)

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

所以:

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

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