2009-10-14 88 views
5

我試圖創建一個簡單的Asp.Net頁面從遠程計算機讀取性能監視器計數器讀數Perfmon計數器。拒絕訪問從遠程計算機(Asp.Net)

當我運行使用Visual Studio開發Web服務器一切正常,但是當我試圖運行在同一個頁面時,其託管在IIS我得到否認就行了錯誤的訪問實例化的性能監視器計數器的頁面:

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

這是例外,我得到:

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

我使用匿名訪問(如匿名用戶與自己)試圖和集成Windows身份驗證 - 這兩個不工作。顯然有些其他帳戶來用於讀取PerfMon計數器(如ASPNET帳戶)。如何讓我的頁面使用我的帳戶而不是該帳戶訪問PerfMon計數器?

回答

6

您在這裏遇到的問題是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

+0

謝謝 - 多數民衆贊成正是我一直在尋找的答案,工作一種享受! – Justin 2009-10-14 10:41:17

2

從MSDN:

要閱讀在Windows Vista中,Windows XP專業x64版或Windows Server 2003的性能計數器,您必須是性能監視器用戶組的成員,或具有管理權限。