Frage

Ich brauche den Status einer Anwendung in den Anwendungen zu überwachen Pool von IIS 7 von einer anderen Maschine auf das gleiche Gebiet. Meine Überwachung Anwendung in C # sein muss und läuft als Windows-Dienst.

Auf meinem Server, ich habe einen Benutzer mit Administratorrechten erstellen und ich führen Sie den Befehl aspnet_regiis -ga Maschine \ Benutzername Wich erfolgreich gearbeitet.

Mein Problem ist, wenn ich versuche, den Anwendungspool zugreifen i noch COMExcepttion bekommen „Zugriff verweigert“. Was habe ich falsch gemacht oder wich Schritt habe ich verpasst?

verwendet, I-Code von http: / /patelshailesh.com/index.php/create-a-website-application-pool-programmatically-using-csharp als Beispiel.

        int status = 0;
        string ipAddress = "10.20.2.13";
        string username = "username";
        string password = "password";
        try
        {
            DirectoryEntry de = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools/MyAppPoolName", ipAddress), username, password);

            //the exception is thron here.
            status = (int)de.InvokeGet("AppPoolState");

            switch (status)
            {
                case 2:
                    //Runnig
                    break;
                case 4:
                    //Stopped
                    break;
                default:
                    break;
            }
        }
        catch (Exception ex)
        {

        }
War es hilfreich?

Lösung

Der Code, den Sie gefunden scheint für IIS6 zu sein. Vielleicht werden Sie besser dran, den neuen und unterstützte IIS7-Management-API. Sie könnten durch den Aufruf von ServerManager.OpenRemote zu erhalten, die Servermanager Objekt.

Andere Tipps

Sie können herum zu verwirren müssen mit der AuthenticationType , der Standard mit 2,0 Start ist sicher, aber Sie könnten auf Set SSL benötigen. Außerdem habe ich Zugriff verweigert Nachrichten von Konten mit dem gesehen „Benutzer muss das Kennwort bei der nächsten Anmeldung ändern“ aktiviert.

Das funktioniert ziemlich gut auf Windows 7 und Windows Server 2008 (leider nicht auf XP und 2003 Server). Ich musste Management Service Rolle hinzufügen in der IIS über den Server-Manager, um Remote-Verbindung zu ermöglichen.

Hier ist ein kurzes Beispiel dafür, wie sich der Zustand eines Application Pool zu erhalten.

public ObjectState State
    {
        get
        {
            ServerManager server = null;
            ObjectState result = ObjectState.Unknown;
            try
            {
                server = ServerManager.OpenRemote(address);
                result = server.ApplicationPools[name].State;
            }
            finally
            {
                if (server != null)
                    server.Dispose();
            }

            return result;
        }
    }

Dank driis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top