WCF服务连接第三方dll与IIS



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

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

应用程序完成了它应该做的事情。现在当我想要分发它并在IIS中运行它时。我正面临一个奇怪的问题。应用程序从dll中获取数据,当我在IIS中运行它时,它失败并在连接到dll时给出错误。

使用CLSID为组件检索COM类工厂{FCEC6861-5866-4F9E9A09-7CC868C30A8B}失败,原因如下错误:80070005访问被拒绝。(来自HRESULT的例外:0 x80070005 (E_ACCESSDENIED)) .

经过一些研究,我发现去组件服务和内部DCOM配置我改变dll的安全性给每个人。错误停止。

但是现在我没有得到错误,但是我没有得到数据,就像提供数据的软件关闭时一样。但是可以在我的ASP.net开发服务器上工作。

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

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

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

:

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

我的故障排除建议是将您的应用程序运行的IIS应用程序池更改为本地管理员。如果工作正常,将DCOM上的访问权限恢复为默认值(在更改为每个人之前),然后再试一次。您还可以尝试在本地系统帐户下运行应用程序池,看看会发生什么。

相关内容

最新更新