C# &引用;RPC服务器不可用";使用WMI查询

C# &引用;RPC服务器不可用";使用WMI查询,c#,asp.net,wmi,rpc,wmi-query,C#,Asp.net,Wmi,Rpc,Wmi Query,我有一个运行Server2008R2的web服务器工作组,我试图在其中管理一个脚本来检查所有服务器的磁盘空间。我在几个月前设置服务器时就已经设置好了,我相信它工作得很好。现在我去检查,它给出了一个错误,说“RPC服务器不可用”。该脚本是一个C#ASP.NET页面,尽管我在PowerShell中尝试过类似的调用,但它给出了相同的错误。该脚本可以很好地访问本地计算机的信息,但无法访问远程服务器信息 我已经花了几个小时把我能找到的东西都找遍了,但什么都没用。我已经为WMI(远程和本地)、DCOM(远程

我有一个运行Server2008R2的web服务器工作组,我试图在其中管理一个脚本来检查所有服务器的磁盘空间。我在几个月前设置服务器时就已经设置好了,我相信它工作得很好。现在我去检查,它给出了一个错误,说“RPC服务器不可用”。该脚本是一个C#ASP.NET页面,尽管我在PowerShell中尝试过类似的调用,但它给出了相同的错误。该脚本可以很好地访问本地计算机的信息,但无法访问远程服务器信息

我已经花了几个小时把我能找到的东西都找遍了,但什么都没用。我已经为WMI(远程和本地)、DCOM(远程和本地)以及正在访问的计算机的整个驱动器设置了权限。我使用了计算机名、IP地址、计算机全名(xxx.echomounting.com),并在ConnectionOptions对象上尝试了许多模拟和身份验证设置

我知道我使用的用户名/密码是正确的,因为我可以从另一个访问其中一个的碎片目录

是否知道我还可以检查哪些内容可能导致此错误

ConnectionOptions oConn = new ConnectionOptions();
    oConn.Impersonation = ImpersonationLevel.Impersonate;
    oConn.EnablePrivileges = true;
    oConn.Username = username;
    oConn.Password = password;
    //oConn.Authentication = AuthenticationLevel.PacketPrivacy;
    string strNameSpace = @"\\";

    if (srvname != "")
        strNameSpace += srvname + ".echomountain.com";
    else
        strNameSpace += ".";

    strNameSpace += @"\root\cimv2";

    ManagementScope oMs = new ManagementScope(strNameSpace, oConn);

    //get Fixed disk state
    ObjectQuery oQuery = new ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");

    //Execute the query
    ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs, oQuery);

    //Get the results
    ManagementObjectCollection oReturnCollection = oSearcher.Get();

    //loop through found drives and write out info
    double D_Freespace = 0;
    double D_Totalspace = 0;
    foreach (ManagementObject oReturn in oReturnCollection)
    {
        // Disk name
        //MessageBox.Show("Name : " + oReturn["Name"].ToString());
        // Free Space in bytes
        string strFreespace = oReturn["FreeSpace"].ToString();
        D_Freespace = D_Freespace + System.Convert.ToDouble(strFreespace);
        // Size in bytes
        string strTotalspace = oReturn["Size"].ToString();
        D_Totalspace = D_Totalspace + System.Convert.ToDouble(strTotalspace);
        boxSize = (D_Totalspace / GB).ToString("##.00");
        boxFree = (D_Freespace / GB).ToString("##.00");
        Response.Write(srvname + ":" + boxSize + ":" + boxFree);
    }
“/”应用程序中出现服务器错误

RPC服务器不可用。(来自HRESULT的异常:0x800706BA)

描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:System.Runtime.InteropServices.COMException:RPC服务器不可用。(来自HRESULT的异常:0x800706BA)

源错误:

第64行: 第65行://获取结果 第66行:ManagementObjectCollection或TurnCollection=oSearcher.Get(); 第67行: 第68行://循环查找到的驱动器并写出信息

源文件:c:\Web\medelaimages.com\iis\tool\boxinfoagent.aspx行:66

堆栈跟踪:

[COMException(0x800706ba):RPC服务器不可用。(来自HRESULT的异常:0x800706ba)] System.Runtime.InteropServices.Marshal.ThroweExceptionForhr内部(Int32 errorCode,IntPtr errorInfo)+0 系统.管理.管理范围.初始化项(对象o)+674 System.Management.ManagementScope.Initialize()+347 System.Management.ManagementObjectSearcher.Initialize()+189 System.Management.ManagementObjectSearcher.Get()+54 ASP.tool\u boxinfoagent\u aspx.Page\u加载c:\Web\medelaimages.com\iis\tool\boxinfoagent.aspx:66中的(对象发送方,事件参数e) System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,对象o,对象t,事件参数e)+25 System.Web.UI.Control.LoadRecursive()+71 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint)+3048

版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.1


错误消息告诉您RPC已被阻止,这是Windows 7和2008上的默认策略设置。通过策略打开它,或者使用WMI连接和管理主机。在内部可信网络上,通常启用RPC。美国政府的计算机安全政策委员会,像那些创建FDCC和USGCB的委员会一样,没有推荐的RPC设置,所以可以启用它。通过WMI管理实时系统非常困难,因为您无法查看远程主机的注册表、计划任务、文件夹和文件。但是,您可以通过WMI轻松管理服务

错误
RPC服务器不可用。(HRESULT的异常:0x800706BA)
在以下情况下可能发生

  • 由于防火墙限制,目标计算机上的入站RPC/WMI连接被阻止

  • 只是因为您输入的目标计算机的主机名/IP地址不正确

错误发生在任何身份验证和/或授权操作之前,因此在此步骤中不需要处理权限。事实上,如果用户帐户缺少对特定命名空间的必要权限,则会出现另一个错误和错误代码:
访问被拒绝。(0x80041003)


MSDN文章介绍了为远程WMI访问添加防火墙例外:。

只需转到IIS管理器。在应用程序池中启动您的网站服务。
它适用于我

此外,您需要在远程计算机上的Windows防火墙中启用Windows Management Instrumentation(WMI)规则

1] 打开Windows防火墙。
2] 单击允许应用程序或功能通过windows防火墙。
3] 为Windows Management Instrumentation(WMI)启用权限


我也面临同样的问题。早些时候,我在使用服务器IP时遇到此错误,但在使用服务器FQDN名称后能够连接。排除故障后,我发现我的DNS PTR记录不正确。修复后,我能够连接WMI与IP地址也。我使用了wbemtest WMI测试工具。

我得到了相同的错误,但它是随机的,我的意思是,有时我得到这个错误,有时我没有。看起来这取决于我使用的登录类型。如何登录?域帐户?我的登录在每台服务器上分别设置,尽管它们共享相同的凭据。事实上,我已经放弃了解决这个问题。如果您让它工作,即使是间歇性的,我也会对您的工作方式感兴趣。假设您的脚本在域计算机上运行,您应该不会有任何问题,相反,如果您在域之外运行,请尝试使用domain\\username作为用户名。如果使用DOMAIN\\username作为登录名,则不会出现错误(大多数情况下)。请通过尝试映射到主机的已知共享来验证RPC是否已禁用。如果失败,则根据错误消息,您知道RPC已禁用。在这种情况下,请尝试通过WMI连接。如果WMI可以工作,那么在回复中添加一条注释,我将用一个链接来回答,该链接指向应该适合您的代码。