我有两个相同的C#代码,可以远程连接到另一台服务器:一个来自控制台,另一个来自Web应用程序:
var mgr = ServerManager.OpenRemote(myServer)
控制台一个正常工作。然而另一个失败,出现以下异常:
带有此com消息的System.UnAuthorizedAccessException:{"从机器检索到具有CLSID {2B72133B-3F5B-4602-8952-803546CE3344}的远程组件的COM类工厂失败,原因是以下错误:80070005。 #34;}
我已在两台服务器上禁用防火墙并重新启动它们。
是否有方法或工具可以帮助我了解每个连接如何发挥作用:服务器发送和接收的登录和访问权限是什么?
我的尝试不会被困在IIS日志和事件查看器中。
我试图让小提琴听,但它也找不到任何东西。
答案 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权限问题。