2009-10-14 11 views
5

Ich versuche, eine einfache Asp.Net-Seite zu erstellen, um Perfmon-Leistungsindikatoren von einem Remotecomputer zu lesen.Zugriff verweigert Lesen von Perfmon-Leistungsindikatoren von einem Remote-Computer (Asp.Net)

Wenn ich die Seite mit dem Visual Studio-Entwicklungswebserver ausführen, ist alles gut, aber wenn ich versuche, dieselbe Seite auszuführen, wenn es auf IIS gehostet wird, erhalte ich einen Zugriffsverweigerungsfehler in der Zeile, die den Perfmon-Zähler instanziiert:

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

das ist die Ausnahme, die ich erhalten:

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

ich habe versucht, sowohl den anonymen Zugriff verwendet (mit mir als anonymer Benutzer) und die integrierte Windows-Authentifizierung - beide arbeiten nicht. Natürlich wird ein anderes Konto verwendet, um die PerfMon-Zähler (wie das ASPNET-Konto) zu lesen. Wie erhalte ich meine Seite, um auf die PerfMon-Leistungsindikatoren zuzugreifen, indem ich mein Konto anstelle dieses Kontos verwende?

Antwort

6

Das Problem, das Sie hier haben, ist, dass IIS im Kontext eines lokalen Kontos (standardmäßig) ausgeführt wird. Dieses lokale Konto ist auf dem Remotecomputer nicht vorhanden und kann daher keine Verbindung herstellen, um die Leistungsindikatoren abzurufen. Wenn Sie den VS-Entwicklungs-Webserver verwenden, läuft er unter Ihrem eigenen lokalen Konto und alles funktioniert.

Wenn Sie sich in einer Domänenumgebung befinden, können Sie den IIS-Anwendungspool so konfigurieren, dass er als Domänenkonto mit Zugriff auf beide Computer ausgeführt wird. Alles funktioniert, Sie möchten jedoch möglicherweise mehr Kontrolle darüber.

Sie können entweder die Basisauthentifizierung verwenden, wobei die Anwendung für den Identitätswechsel konfiguriert ist (oder wenn IIS7 den Pool für die Ausführung unter dem authentifizierten Konto konfiguriert hat) oder Sie die Identität annehmen, bevor Sie den Zähler gelesen haben.

Es gibt ein paar Möglichkeiten zum Imitieren - die sicherste ist IIS zu konfigurieren, die integrierte Authentifizierung verwenden und dann den Anruf einpacken

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

Wenn Sie dann keine Authentifizierung möchten, müssen Sie müssen konfigurieren der App-Pool, oder hart Code einen Benutzernamen und ein Passwort in Ihrer Anwendung - das sollte der letzte Ausweg sein, siehe KB306158

+0

Danke - das ist genau die Antwort, die ich suchte, arbeitete ein Vergnügen! – Justin

2

Von MSDN:

Um Leistungsindikatoren in Windows Vista, Windows XP Professional x64 Edition zu lesen oder Windows Server 2003 müssen Sie entweder ein Mitglied der Gruppe Systemmonitorbenutzer oder über Administratorrechte.

Verwandte Themen