如何从 C# 代码中跟踪连接失败的原因?
Posted
技术标签:
【中文标题】如何从 C# 代码中跟踪连接失败的原因?【英文标题】:how to trace connection failure reasons from C# code? 【发布时间】: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您收到该异常的原因是应用程序池标识没有足够的权限。要使用 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 权限问题。
【讨论】:
以上是关于如何从 C# 代码中跟踪连接失败的原因?的主要内容,如果未能解决你的问题,请参考以下文章