2009-10-14 8 views
5

Próbuję utworzyć prostą stronę Asp.Net, aby odczytać liczniki Perfmon ze zdalnego komputera.Odmowa dostępu Odczytywanie liczników Perfmona z komputera zdalnego (Asp.Net)

Po uruchomieniu strony przy użyciu serwera WWW Visual Studio wszystko działa dobrze, jednak gdy próbuję uruchomić tę samą stronę, gdy jest ona hostowana w IIS, otrzymuję błąd odmowy dostępu w linii, która tworzy instancję licznika Perfmon:

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

jest to wyjątek uzyskać:

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

próbowałem przy użyciu zarówno dostęp anonimowy (ze mną jako użytkownik anonimowy) i zintegrowane uwierzytelnianie Windows - zarówno nie pracy. Oczywiście inne konta są używane do odczytu liczników PerfMon (takich jak konto ASPNET). Jak mogę uzyskać dostęp do liczników PerfMon na mojej stronie zamiast na tym koncie?

Odpowiedz

6

Problem polega na tym, że usługi IIS działają w kontekście konta lokalnego (domyślnie). To konto lokalne nie istnieje na zdalnym komputerze, więc nie można się połączyć, aby uzyskać liczniki wydajności. Kiedy korzystasz z serwera WWW rozwoju VS, działa on pod własnym kontem lokalnym, więc wszystko działa.

Jeśli znajdujesz się w środowisku domeny, możesz skonfigurować pulę aplikacji IIS tak, aby działała jako konto domeny z dostępem do obu komputerów, a wszystko będzie działać, jednak możesz mieć większą kontrolę nad tym.

Można użyć podstawowego uwierzytelniania, z aplikacją skonfigurowaną do personifikacji (lub jeśli korzystasz z IIS7 z pulą skonfigurowaną do działania pod uwierzytelnionym kontem) lub podszywać się tuż przed odczytaniem licznika.

Istnieje kilka sposobów personifikować - najbezpieczniejsza jest skonfigurowanie IIS w użyciu zintegrowanego uwierzytelniania, a następnie owinąć połączenia się

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

Jeśli nie chcesz uwierzytelniania będziesz musiał skonfigurować pula aplikacji lub twardy kod nazwy użytkownika i hasła w aplikacji - to powinno być w ostateczności, zobacz KB306158

+0

Dzięki - to dokładnie odpowiedź, której szukałem, pracowałem na poczęstunek! – Justin

2

Od MSDN:

Aby odczytać liczniki wydajności w systemie Windows Vista, Windows XP Professional x64 Edition lub Windows Server 2003, należy albo być członkiem grupy Użytkownicy monitora wydajności lub mieć uprawnienia administracyjne.