Domanda

Ho bisogno di monitorare lo stato di una richiesta nelle applicazioni pool di IIS 7 da un altra macchina sullo stesso dominio. La mia applicazione di monitoraggio deve essere in C # e in esecuzione come servizio di Windows.

Sul mio assistente, ho creare un utente con diritti di amministrazione e io eseguire il comando aspnet_regiis -ga macchina \ nomeutente wich ha funzionato con successo.

Il mio problema è quando provo ad accedere al pool di applicazioni ho ancora ottenere COMExcepttion "Accesso negato". Che cosa ho fatto passo sbagliato o wich mi sono perso?

ho usato il codice da http: / /patelshailesh.com/index.php/create-a-website-application-pool-programmatically-using-csharp come esempio.

        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)
        {

        }
È stato utile?

Soluzione

Il codice che hai trovato sembra essere per IIS6. Forse sarà meglio utilizzando il nuovo e sostenuto API di gestione IIS7. Si potrebbe iniziare chiamando ServerManager.OpenRemote per ottenere il ServerManager oggetto.

Altri suggerimenti

Si potrebbe aver bisogno di pasticciare con la AuthenticationType , il valore di default a partire da 2.0 è sicuro, ma potrebbe essere necessario SSL set. Inoltre, ho visto Accesso negato messaggi provenienti da account con il "utente deve cambiare la password al prossimo accesso" controllato.

Questo funziona abbastanza bene su Windows 7 e Windows Server 2008 (purtroppo non su XP e 2003 Server). Ho dovuto aggiungere ruolo Service Management nel IIS tramite Server Manager al fine di consentire la connessione remota.

Ecco un breve esempio di come ottenere lo Stato di un pool di applicazioni.

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;
        }
    }

Grazie a driis.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top