簡體   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