【问题标题】:WCF service connection with third party dll with IIS使用 IIS 与第三方 dll 的 WCF 服务连接
【发布时间】:2023-03-10 13:45:02
【问题描述】:

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

【问题讨论】:

  • 我不确定向所有人提供访问权限是这里最明智的解决方案。您可能应该做的是确定该站点在 IIS 中运行的帐户,然后将第 3 方 DLL 的权限也授予该帐户。根据应用的性质,您甚至可以考虑创建一个服务帐户,将其分配给运行该应用的应用池,并为其授予适当的权限。
  • 谢谢。我知道这不是一个好主意,我知道我想找出问题所在。尝试一切和任何事情:)

标签: c# wcf


【解决方案1】:

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

所以:

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

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

【讨论】:

  • 您的应用程序在其下运行的 IIS 应用程序池更改为本地管理员我该怎么做?
  • 所以 Points -VS 和 COM 都可以在用户模式下运行。但一个在用户中,另一个在管理员中不起作用。当我以管理员身份运行应用程序时
猜你喜欢
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 2011-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多