c# - 使用 IIS 与第三方 dll 的 WCF 服务连接

标签 c# wcf

我正在使用 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/

相关文章:

c# - 在 Datagridview 中显示数据库搜索结果

windows - NetTcpBinding(读取 WindowsStreamSecurityBindingElement)如何加密/签署消息?

wcf - Fiddler2 中 POST 方法的请求正文

asp.net - 如何在 WCF 服务中记录原始请求

c# - 碰撞功能无法正常工作

c# - 如何创建 C# 8.0 控制台应用程序?

c# - 私有(private)静态只读字段上的代码契约(Contract)和失败

c# - 触发器 VS 转换器

c# - WCF服务将数据集与数据类作为返回类型

wcf - 在Vista上获取WCF服务的System.ServiceModel.AddressAccessDeniedException