加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 07:14:43 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试创建一个简单的Asp.Net页面来从远程计算机读取Perfmon计数器. 当我使用Visual Studio开发Web服务器运行页面时一切都很好,但是当我在IIS上托管时尝试运行同一页面时,我在实例化Perfmon计数器的行上得到访问被拒绝错误: PerformanceCounter freeSpa
我正在尝试创建一个简单的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","RemoteMachine12");
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读