繁体   English   中英

访问被拒绝从远程计算机读取Perfmon计数器(Asp.Net)

[英]Access denied reading Perfmon counters from a remote machine (Asp.Net)

我正在尝试创建一个简单的Asp.Net页面来从远程计算机读取Perfmon计数器。

当我使用Visual Studio开发Web服务器运行页面时一切都很好,但是当我在IIS上托管时尝试运行同一页面时,我在实例化Perfmon计数器的行上获得了访问被拒绝错误:

PerformanceCounter freeSpaceCounter = new PerformanceCounter("LogicalDisk", "Free Megabytes", "D:", "RemoteMachine12");

这是我得到的例外:

Exception Details: System.ComponentModel.Win32Exception: Access is denied

我尝试过使用匿名访问(我自己作为匿名用户)和集成Windows身份验证 - 两者都不起作用。 显然,其他一些帐户用于读取PerfMon计数器(如ASPNET帐户)。 如何使用我的帐户而不是该帐户访问我的页面以访问PerfMon计数器?

您遇到的问题是IIS在本地帐户的上下文中运行(默认情况下)。 远程计算机上不存在此本地帐户,因此无法连接以获取性能计数器。 当您使用VS开发Web服务器时,它在您自己的本地帐户下运行,因此一切正常。

如果您处于域环境中,则可以将IIS应用程序池配置为可以访问这两台计算机的域帐户运行,并且一切都可以正常运行,但是您可能需要对此进行更多控制。

您可以使用基本身份验证,将应用程序配置为模拟(或者如果您使用IIS7将池配置为在经过身份验证的帐户下运行),或者在您阅读计数器之前进行模拟。

有两种方法可以模拟 - 最安全的方法是将IIS配置为使用集成身份验证,然后打包调用

PerformanceCounter freeSpaceCounter = null;
using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
    freeSpaceCounter = new PerformanceCounter("LogicalDisk", 
                               "Free Megabytes", "D:", "RemoteMachine12");
}

如果您不想要身份验证,则必须配置应用程序池,或者在应用程序中硬编码用户名和密码 - 这应该是最后的选择,请参阅KB306158

来自MSDN:

要在Windows Vista,Windows XP Professional x64 Edition或Windows Server 2003中读取性能计数器,您必须是Performance Monitor Users组的成员或具有管理权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM