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

标签 asp.net permissions

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

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

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

这是我得到的异常(exception):
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

关于asp.net - 访问被拒绝从远程机器 (Asp.Net) 读取 Perfmon 计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565371/

相关文章:

docker - 使用 linux 和 win 提取非 root 命名卷权限的工作方法

command-line - 使文件归root所有后,有效用户ID不会改变

android - 如何在 Android 中检测电子邮件发送/接收事件和/或阅读电子邮件内容?

.net - 提示用户从浏览器安装 ActiveX/.Net 类库

asp.net - 找不到 Http 404

permissions - Wix:使用permissionEx 在安装文件夹中设置文件夹的权限

javascript - FileStream 响应显示 � 而不是拉丁字符

c# - 脚本资源.axd :5Uncaught TypeError: Object function

c# - 默认响应 Content-Type 有问题

javascript - 防止内表允许删除,在jquery ui sortable中