【问题标题】:how to trace connection failure reasons from C# code?如何从 C# 代码中跟踪连接失败的原因?
【发布时间】:2013-07-16 15:00:19
【问题描述】:

我有两段相同的 C# 代码远程连接到另一台服务器:一段来自控制台,另一段来自 Web 应用程序:

var mgr = ServerManager.OpenRemote(myServer) 

控制台工作正常。然而,另一个失败并出现以下异常:

System.UnAuthorizedAccessException with this com-message: {"Retrieve the COM class factory for remote component with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} from machine failed because of the following error: 80070005 ."}

我已禁用两台服务器上的防火墙并重新启动它们。

有没有一种方法或工具可以帮助我了解每个连接是如何进行的:两个服务器发送和接收的登录和访问权限是什么?

我的尝试没有被困在 IIS 日志和事件查看器中。

我试图让提琴手听,但它也没有找到任何东西。

【问题讨论】:

  • 是身份的区别吗?在控制台的情况下,我认为身份将是你,可能是两个盒子上的管理员。但在网页代码的情况下,身份可能较弱。错误信息是什么??
  • 错误是:System.UnAuthorizedAccessException with this com-message: {"Retrieving the COM class factory for remote component with CLSID {2B72133B-3F5B-4602-8952-803546CE3344} from machine failed由于以下错误:80070005 。”}正是这条消息的丑陋让我提出了这个问题。

标签: iis-7.5 windows-server-2008


【解决方案1】:

您收到该异常的原因是应用程序池标识没有足够的权限。要使用 Microsoft.Web.Administration 托管 API,您需要是管理员。

此外,当您使用ServerManager.OpenRemote() 时,您的网站运行所用的帐户(无论是应用程序池身份还是其他帐户)都需要是具有足够权限的有效域帐户。

顺便提一下,CLSID“2B72133B-3F5B-4602-8952-803546CE3344”是Microsoft.ApplicationHost.WritableAdminManager COM 组件的类 ID,它支持 ServerManager 托管 API。

【讨论】:

    【解决方案2】:

    我建议您使用 SysInternals 的 Process Monitor 来观察 Web 进程在做什么。诀窍是过滤信息的消防水带! 顺便说一句,我怀疑这是应用程序池标识或 DCOM 权限问题。

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 2022-12-22
      相关资源
      最近更新 更多