如何从C#代码中追踪连接失败的原因?

时间:2013-07-16 15:00:19

标签: iis-7.5 windows-server-2008

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

var mgr = ServerManager.OpenRemote(myServer) 

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

  

带有此com消息的System.UnAuthorizedAccessException:{"从机器检索到具有CLSID {2B72133B-3F5B-4602-8952-803546CE3344}的远程组件的COM类工厂失败,原因是以下错误:80070005。 #34;}

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

是否有方法或工具可以帮助我了解每个连接如何发挥作用:服务器发送和接收的登录和访问权限是什么?

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

我试图让小提琴听,但它也找不到任何东西。

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

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